Store incomplete date in MySQL date field

前端 未结 3 1443
孤街浪徒
孤街浪徒 2020-12-28 16:13

I want to offer the user the possibility to introduce dates that are incomplete (for example just the year 2005, or Jan 1998) but also complete dates with year, month, day.

相关标签:
3条回答
  • 2020-12-28 16:33

    Well, if you used a date field then you should expect those 0s. One way you can get rid of them is by using the varchar selection rather. However, it is better to use a date field since thats what is stored there.

    If you have to allow users to enter an incomplete date then it has to be a varchar and in that case you can format the input with your script and store in that column

    0 讨论(0)
  • 2020-12-28 16:34

    There's a small note in the documentation for the DATE_FORMAT() about MySQL allowing incomplete dates:

    Ranges for the month and day specifiers begin with zero due to the fact that MySQL permits the storing of incomplete dates such as '2014-00-00'.

    As pointed out by @wonk0, MySQL will sets invalid dates to 0000-00-00 00:00:00 when ALLOW_INVALID_DATES is not set. However, even when ALLOW_INVALID_DATES is not set, inserting a valid year with month and day set to zero does not appear to trigger this behaviour - at least not in my testing (MySQL 5.1.54-1ubuntu4). I have used this feature before without any problem, but I have so far been unable to find any more detailed documentation that describes this behaviour in full.

    Date/Time comparisons also appear to work as expected: for example, 2011-01-00 > 2011-00-00 and 2011-00-01 > 2011-00-00 do as you would expect.

    UPDATE

    See this answer (by another Mike) to a similar question. It points to an extract from The Definitive Guide to MySQL 5:

    In older versions of MySQL, the DATE and DATETIME data types did only a limited amount of type checking. Values between 0 and 12 for months, and 0 and 31 for days were generally allowed. However, it is the responsibility of the client program to provide correct data. (For example, 0 is a permissible value for a month or day, in order to provide the possibility of storing incomplete or unknown data.)

    Beginning with MySQL 5.0.2, there is a more thorough validation, so that only valid data can be stored. Still allowed are the month and day values 0, as well as the date 0000-00-00.

    0 讨论(0)
  • 2020-12-28 16:36

    Storing parts of dates depends on the sql mode MySQL is running in. Please read http://dev.mysql.com/doc/refman/5.1/en/server-sql-mode.html, especially about invalid dates in http://dev.mysql.com/doc/refman/5.1/en/server-sql-mode.html#sqlmode_allow_invalid_dates.

    0 讨论(0)
提交回复
热议问题