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)
正常。
分类:
MySQL
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?