色色一区二区三区,一本大道道久久九九AV综合,国产香蕉97碰碰视频va碰碰看,综合亚洲国产2020

    <legend id="mljv4"><u id="mljv4"><blockquote id="mljv4"></blockquote></u></legend>

    <sub id="mljv4"><ol id="mljv4"><abbr id="mljv4"></abbr></ol></sub>
      <mark id="mljv4"></mark>

      在MyL中存儲(chǔ)日期時(shí)應(yīng)該使用DATE還是VARCHAR?

      2021-02-11 16:06

      簡(jiǎn)單地說(shuō),我在Orders表上有日期和時(shí)間屬性。這些屬性的數(shù)據(jù)類型是MyL的DATE屬性。但是每次我在PHP中回顯日期和時(shí)間時(shí),它只會(huì)給我一個(gè)字符串,而不是一個(gè)日期對(duì)

      解答動(dòng)態(tài)

      • 我不理解為什么會(huì)存在日期數(shù)據(jù)類型s
        總是將日期值存儲(chǔ)在日期字段中。
        當(dāng)您檢索這些值時(shí),PHP返回的是日期值的字符表示形式,但在數(shù)據(jù)庫(kù)中,您可以(而且應(yīng)該)對(duì)日期字段執(zhí)行日期操作,而這些操作在字符串中是無(wú)法有效執(zhí)行的。
        例如,讓我們看一些類似的操作條目:
        選擇字符\日期,表1中的日期按字符日期排序;+-----------+-----------+

        • 字符日期

          • 日期

            • 日期

              • +----------------+----------------+

                • 2021年3月1日

                  • 2021年3月1日

                    • 2021年2月12日

                      • 2021年2月12日

                        • 2021年1月23日

                          • 2021年1月23日

                            • +----------------+選擇表1中的字符

                              • 日期、日期

                                • 按日期排序;+-------------+-------------+

                                  • 字符日期日期日期日期日期日期2021年1月23日2021年2月12日2021年2月12日2021年3月1日2021年3月1日見區(qū)別?
                                    由于應(yīng)用程序往往對(duì)字符數(shù)據(jù)的輸入方式應(yīng)用較少的控制,字符數(shù)據(jù)很快就會(huì)變得非;靵y,甚至更難處理解釋。為例如,“01/04/07”是什么時(shí)候?1月4日?四月一日?2001年4月7日?這取決于你在世界的哪個(gè)角落!
                                    好的,您可以說(shuō)您的應(yīng)用程序?qū)演斎氲摹⒆址硎镜娜掌谥缔D(zhuǎn)換成正確的日期,并存儲(chǔ)格式一致的[字符]版本,但是,一旦您開始對(duì)這些值進(jìn)行日期操作,您的數(shù)據(jù)庫(kù)就必須開始動(dòng)態(tài)地進(jìn)行日期轉(zhuǎn)換,這可能非常慢。
                                    使用正確的工具完成正確的工作…

                                    • 在編程中,我們總是在抽象和壓抑中工作表述:文本字符串2021-02-09 12:47:14是特定時(shí)間點(diǎn)的表示整數(shù)1612874834是同一時(shí)間點(diǎn)的不同表示這兩個(gè)最終都將以二進(jìn)制形式表示;文本字符串已經(jīng)是一種抽象,可以節(jié)省我們的思考關(guān)于這個(gè)事實(shí) ,我們可以相對(duì)容易地在這些和許多其他表示之間進(jìn)行轉(zhuǎn)換,但是我們也希望能夠?qū)λ鼈儓?zhí)行操作:獲取輸入、顯示輸出、排序日期、查找兩個(gè)日期之間的天數(shù)等等。
                                      對(duì)于這些,我們希望使用適當(dāng)?shù)某橄?我們不想為它們編寫一堆二進(jìn)制邏輯代碼每次操作,我們都要建立可讀的代碼。對(duì)于用戶的輸入和輸出,“日期”的抽象是一個(gè)匹配某種模式的文本字符串,這是一個(gè)有用的方法一個(gè)。不過,可能有許多這樣的模式,這取決于上下文—美國(guó)的用戶希望以“月/日/年”格式查看和輸入日期,世界其他地方的用戶將需要“日/月/年”;。因此,我們立即需要一個(gè)表示日期的中立抽象,而不僅僅是存儲(chǔ)用戶的輸入直接。為了找出兩個(gè)日期之間的天數(shù),我們需要一個(gè)更高層次的抽象,它不是關(guān)于日期看起來(lái)像什么,而是它代表什么。 對(duì)作業(yè)使用錯(cuò)誤的抽象會(huì)導(dǎo)致不必要的復(fù)雜代碼。它還可能導(dǎo)致錯(cuò)誤,例如,如果您將所有日期作為字符串傳遞,并且不小心傳入了格式不正確的內(nèi)容,您可能會(huì)得到“垃圾輸入,垃圾輸出”,而不是一個(gè)明確的錯(cuò)誤。因此,在可能的情況下,您應(yīng)該用更高級(jí)別的抽象來(lái)表示所有內(nèi)容。對(duì)于date-time值,這意味著PHP中的datetimeimmummable對(duì)象和MyL.
                                      中的DateTime列存在一個(gè)不幸的障礙:在向數(shù)據(jù)庫(kù)發(fā)送數(shù)據(jù)或從數(shù)據(jù)庫(kù)發(fā)送數(shù)據(jù)時(shí),需要它處于雙方都能理解的表示形式中。大多數(shù)數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序使用“最小公分母”方法,其中表示是文本字符串。一旦你從數(shù)據(jù)庫(kù)中得到了這個(gè)字符串,你就可以并且應(yīng)該把它轉(zhuǎn)換成PHP的DateTimeImmutable類型,這樣你就有了使用它的最佳抽象。

                                      • 但是每次我在PHP中回顯日期和時(shí)間時(shí),它只會(huì)給我一個(gè)字符串,而不是一個(gè)日期對(duì)象。
                                        這基本上只是DB access庫(kù)的一個(gè)怪癖。歸根結(jié)底,所有數(shù)據(jù)都可以簡(jiǎn)化為字符串,DB access庫(kù)只需要在數(shù)據(jù)庫(kù)數(shù)據(jù)類型和編程語(yǔ)言的數(shù)據(jù)類型之間進(jìn)行轉(zhuǎn)換。
                                        為什么會(huì)存在日期數(shù)據(jù)類型如果可以隨意地將日期對(duì)象存儲(chǔ)為VARCHAR在DB
                                        中,則可以將日期存儲(chǔ)在VARCHAR列中,也可以在VARCHAR列中存儲(chǔ)非日期。數(shù)據(jù)庫(kù)為列提供了數(shù)據(jù)類型以強(qiáng)制數(shù)據(jù)驗(yàn)證,當(dāng)您使用日期列時(shí),您知道該列不可能包含日期以外的任何內(nèi)容,因此您可以簡(jiǎn)化應(yīng)用程序邏輯,這樣就不必?fù)?dān)心包含無(wú)效數(shù)據(jù)。另外,datatypes允許數(shù)據(jù)庫(kù)使用特定于數(shù)據(jù)類型的函數(shù),這允許您構(gòu)建更復(fù)雜的操作,如涉及列的aggregate/group-by查詢。如果需要為報(bào)告編寫聚合查詢,如“查找按星期幾分組的事務(wù)總數(shù)”;。您將需要使用數(shù)據(jù)庫(kù)日期/時(shí)間函數(shù),因?yàn)閷⒄麄(gè)表加載到PHP以便使用PHP日期函數(shù)解析日期將非常慢,并且您不能將這些用作子查詢的中間結(jié)果。
                                        數(shù)據(jù)類型是數(shù)據(jù)加驗(yàn)證和操作。
                                        理論上,您只需要varchar類型來(lái)存儲(chǔ)任何數(shù)據(jù)但是你必須自己在應(yīng)用程序代碼中處理所有的驗(yàn)證和操作,這將使編寫性能查詢變得更加困難。每個(gè)字符是一個(gè)VARCHAR,每個(gè)VARCHAR是一個(gè)字節(jié)。這意味著你的VARCHAR日期至少是日期的2.67倍。3.33如果包括分離器。如果字符串日期不是格式化的數(shù)字集,則會(huì)更大。這不是很大的問題,也可能不是磁盤空間的問題。但是對(duì)于內(nèi)存中的空間,當(dāng)您需要獲取或排序數(shù)據(jù)時(shí),它會(huì)累加起來(lái)。
                                        Data integrity
                                        如果有人試圖插入一個(gè)日期為'Duodecary 32nd 1999'(甚至是格式化的1999/14/32),則日期字段將不允許它。它會(huì)拋出一個(gè)正確的錯(cuò)誤。你的VARCHAR字段不會(huì)這樣做,這意味著你需要針對(duì)這種可能性進(jìn)行編碼,你需要保證任何其他曾經(jīng)針對(duì)數(shù)據(jù)庫(kù)進(jìn)行編碼的人也會(huì)這樣做。你在為自己制造潛在的問題或更多的工作。通常都是。
                                        此外,根據(jù)VARCHAR的最大長(zhǎng)度,您可能會(huì)得到字符串截?cái)噱e(cuò)誤,或者如果您抑制這些錯(cuò)誤,則會(huì)得到壞數(shù)據(jù)。除非您的VARCHAR比需要的長(zhǎng),否則在這種情況下,您的大小問題可能會(huì)更糟。
                                        simplicity
                                        這在其他答案中提到,但值得重復(fù)。有許多函數(shù)處理日期數(shù)據(jù)類型。增加一定的時(shí)間。確定差異。轉(zhuǎn)換為其他語(yǔ)言(英語(yǔ)/西班牙語(yǔ)/法語(yǔ),而不是C#/JavaScript/PHP)。轉(zhuǎn)換為其他日期格式。對(duì)于VARCHAR,這些不存在。意思是你要么自己動(dòng)手,要么首先把VARCHAR轉(zhuǎn)換成日期。這既是額外的周期,也是你每次需要操縱日期時(shí)需要記住的東西。明白嗎另外:
                                        https://stackoverflow.com/questions/4759012/when-使用varchar和date時(shí)間https://dba.stackexchange.com/questions/208716/which-column-is-better-to-be-used-here-varchar-or-datetime/208724
                                        , 最后我想補(bǔ)充一點(diǎn)。您永遠(yuǎn)不應(yīng)該基于您用來(lái)訪問數(shù)據(jù)庫(kù)的編程語(yǔ)言來(lái)設(shè)計(jì)數(shù)據(jù)庫(kù)。您應(yīng)該根據(jù)您的數(shù)據(jù)和適當(dāng)?shù)臄?shù)據(jù)庫(kù)設(shè)計(jì)標(biāo)準(zhǔn)來(lái)設(shè)計(jì)數(shù)據(jù)庫(kù)。下周你可能會(huì)改用Ruby或Typescript;蛘咂渌丝赡苄枰L問不使用PHP的數(shù)據(jù)。一個(gè)好的數(shù)據(jù)結(jié)構(gòu)比改變數(shù)據(jù)以滿足語(yǔ)言或庫(kù)的需求更好。但是,使用日期和時(shí)間的數(shù)據(jù)類型并使用它們是有原因的。
                                        根據(jù)日期排序(無(wú)論如何可能有效,但取決于您對(duì)文本表示的決定)計(jì)算:兩個(gè)日期之間間隔了多少天1對(duì)我來(lái)說(shuō)最重要的是,web應(yīng)用程序可能同時(shí)有需要不同表示的用戶。我個(gè)人喜歡2021-02-10,有些喜歡2021年1月10日。對(duì)于實(shí)際用戶所期望的,將需要轉(zhuǎn)換例程。這是混亂的,但有助于標(biāo)準(zhǔn)例程可用于日期類型。同樣,我更喜歡24小時(shí)制,而另一個(gè)用戶可能更喜歡AM/PM(在我的語(yǔ)言區(qū)基本上是聞所未聞的)。這個(gè)區(qū)域有時(shí)被稱為I18N,在國(guó)際化中縮短了18個(gè)字符,是一個(gè)著名的抽屜,里面裝滿了問題。

                                        • 取以下字符串:quot;。那是什么日期?2002年12月1日?2012年1月2日?還有別的嗎?這實(shí)際上取決于你生活在世界的哪個(gè)地方。
                                          因此,你真的需要將日期存儲(chǔ)為日期,而不是字符串。正如其他人所提到的,它也有助于對(duì)日期值執(zhí)行操作,但原因之一是它可以幫助程序員更容易地閱讀代碼,并且不會(huì)引入錯(cuò)誤。

                                          • End

                                          免責(zé)聲明:

                                          本頁(yè)內(nèi)容僅代表作者本人意見,若因此產(chǎn)生任何糾紛由作者本人負(fù)責(zé),概與琴島網(wǎng)公司無(wú)關(guān)。本頁(yè)內(nèi)容僅供參考,請(qǐng)您根據(jù)自身實(shí)際情況謹(jǐn)慎操作。尤其涉及您或第三方利益等事項(xiàng),請(qǐng)咨詢專業(yè)人士處理。