MySQL 5.6.35版本STR_TO_DATE对于中文日期转换的BUG

 

MySQL 5.6.35版本STR_TO_DATE对于中文日期转换的BUG

 

mysql> select @@character_set_server;
+------------------------+
| @@character_set_server |
+------------------------+
| gbk                    |
+------------------------+
1 row in set (0.00 sec)

mysql> select version(),@@version;
+------------+------------+
| version()  | @@version  |
+------------+------------+
| 5.6.35-log | 5.6.35-log |
+------------+------------+
1 row in set (0.00 sec)

 

构造测试环境,会看到使用str_to_date后值为NULL。

mysql> create table zkm ( date varchar(100));
Query OK, 0 rows affected (0.00 sec)

mysql> insert into zkm values ('2022年11月14日');
Query OK, 1 row affected (0.00 sec)

mysql> commit;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT STR_TO_DATE(date,'%Y年%m月%d日') FROM  zkm;
+-------------------------------------+
| STR_TO_DATE(date,'%Y年%m月%d日')    |
+-------------------------------------+
| NULL                                |
+-------------------------------------+
1 row in set, 1 warning (0.00 sec)

mysql> show warnings;
+---------+------+-----------------------------------------------------------+
| Level   | Code | Message                                                   |
+---------+------+-----------------------------------------------------------+
| Warning | 1411 | Incorrect datetime value: '2022' for function str_to_date |
+---------+------+-----------------------------------------------------------+
1 row in set (0.00 sec)

mysql> select STR_TO_DATE(date,'%Y') FROM zkm;
+------------------------+
| STR_TO_DATE(date,'%Y') |
+------------------------+
| 2022-00-00             |
+------------------------+
1 row in set, 1 warning (0.00 sec)

从warnings提示可以知道,“年”包括“年”之后的信息全部丢失。 

因此使用STR_TO_DATE(date,'%Y')会发现可以正常显示,只不过“月”“日”信息丢失了。

 

对于使用字段转换有问题,但是对于直接指定的字符串就没有问题。

mysql> SELECT STR_TO_DATE('2022年11月14日','%Y年%m月%d日');
+----------------------------------------------------+
| STR_TO_DATE('2022年11月14日','%Y年%m月%d日')       |
+----------------------------------------------------+
| 2022-11-14                                         |
+----------------------------------------------------+
1 row in set (0.00 sec)

 

另外,在版本8.0.30中就没有这个bug。

(root@localhost 11:23:41) [ccs]> create table zkm ( date varchar(100));
Query OK, 0 rows affected (0.19 sec)

(root@localhost 11:23:44) [ccs]> insert into zkm values ('2022年11月14日');
Query OK, 1 row affected (0.00 sec)

(root@localhost 11:23:46) [ccs]> commit;
Query OK, 0 rows affected (0.00 sec)

(root@localhost 11:23:49) [ccs]> SELECT STR_TO_DATE(date,'%Y年%m月%d日') FROM  zkm;
+-------------------------------------+
| STR_TO_DATE(date,'%Y年%m月%d日')    |
+-------------------------------------+
| 2022-11-14                          |
+-------------------------------------+
1 row in set (0.00 sec)

正常。

 

posted @ 2022-11-15 11:19  PiscesCanon  阅读(258)  评论(0编辑  收藏  举报