我在 MySQL 檔案中讀到,00如果我不知道月份或日期,我可以存盤生日,這正是我所需要的,但這是否僅對舊的 MySQL 版本有效或打開了某些選項?
MySQL 允許您在 DATE 或 DATETIME 列中存盤日期或月份和日期為零的日期。這對于需要存盤您可能不知道確切日期的生日的應用程式很有用。在這種情況下,您只需將日期存盤為“2009-00-00”或“2009-01-00”。
來源:https : //dev.mysql.com/doc/refman/8.0/en/date-and-time-types.html
當我運行播種機時,我得到了這個。
SQLSTATE[22007]:日期時間格式無效:1292 日期值不正確:第 1 行的“birth_date”列的“1806-00-00”
還有其他建議可以解決這個問題嗎?
uj5u.com熱心網友回復:
連接到 MySQL 后立即發出此 SQL 陳述句,以減少連接時間。
SET @@sql_mode := REPLACE(@@sql_mode, 'NO_ZERO_IN_DATE', '');
這將為您的連接關閉NO_ZERO_IN_DATE 模式,允許您按照您的要求進行操作。
uj5u.com熱心網友回復:
想想整數。您將如何存盤“20 到 30 之間的某個整數”之類的值?
- 您可以存盤數字 20,并撰寫應用程式代碼,假設該值可能在值 N 和 N 10 的范圍內。
- 您可以存盤數字 2,并理解這實際上是 N 除以 10 的值。
- 您可以存盤字串值而不是使用 INTEGER 資料型別。您將存盤一個字面上為“20-30”的字串。
- 您可以存盤兩個值,一個是 20,另一個是 30,即范圍的下限和上限。
- 還有什么?
關鍵是無法在單個標量整數值中表示整數范圍。
如果您需要存盤不精確的日期,例如沒有特定日期的 Year-Month,您可能無法使用 DATE、DATETIME 或 TIMESTAMP 資料型別的單個列。這些資料型別用于特定值,而不是范圍。
您可以存盤一個整數,即 YYYYMM,或者您可以存盤作為該月第一個日期的日期,或者作為范圍下限和上限的兩個日期,或者您可以將年、月、日存盤為單獨的列,或其他一些解決方案。這些解決方案中的任何一個都需要您撰寫應用程式代碼來以特殊方式處理它們。您不能僅以默認方式使用 DATE 資料型別。
MySQL 歷史上允許在日期組件中使用零,但這會導致無意義的值。您如何使用 2021-10-00 之類的日期值進行日期算術?那是 2021-10-01 的前一天嗎?也是2021-09-30之后的一天嗎?一個日期怎么可能在這兩個實際日期之間?你明白了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/321365.html
下一篇:JAVA-將字串日期決議為長
