300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > MySQL中日期比较时遇到的编码问题解决办法【MySQL】

MySQL中日期比较时遇到的编码问题解决办法【MySQL】

时间:2020-08-28 20:33:48

相关推荐

MySQL中日期比较时遇到的编码问题解决办法【MySQL】

数据库|mysql教程

MySQL,日期比较,编码问题

数据库-mysql教程

今天帮同事处理一个SQL(简化过后的)执行报错:

免费云源码,vscode 选择删除整行,Ubuntu安装exfat,个人日志 tomcat,爬虫断电,php对大小写敏感,蔡甸seo排名技术,空包网站cms,吉屋网用的什么模板lzw

mysql> select date_format(‘-11-19′,’Y-m-d’) > timediff(‘-11-19’, ‘-11-20’);

微信抢红包 源码,vscode怎么下载解释器,ubuntu开启3306,tomcat 登陆不了,ip欺骗 爬虫,php 逗号分割数组,普兰店seo优化推广,asp网站使用代码,ptcms聚合小说上传模板lzw

ERROR 1267 (HY000): Illegal mix of collations (utf8_general_ci,COERCIBLE) and (latin1_swedish_ci,NUMERIC) for operation ‘>’

网站apk源码,vscode怎么调图形库,ubuntu的硬件,tomcat怎么设置分页,pc爬虫事例,php dao类,江门seo排名优化平台,博客网站源码 java,discuz源码论坛分类信息模板下载lzw

乍一看挺莫名其妙的,查了下手册,发现有这么一段:

The language used for day and month names and abbreviations is controlled by the value of the lc_time_names system variable (Section 9.7, “MySQL Server Locale Support”).

The DATE_FORMAT() returns a string with a character set and collation given by character_set_connection and collation_connection so that it can return month and weekday names containing non-ASCII characters.

也就是说,DATE_FORMATE() 函数返回的结果是带有字符集/校验集属性的,而 TIMEDIFF() 函数则没有字符集/校验集属性,我们来验证一下:

mysql> set names utf8;

mysql> select charset(date_format(‘-11-19′,’Y-m-d’)), charset(timediff(‘-11-19’, ‘-11-20’));

+——————————————–+———————————————–+

| charset(date_format(‘-11-19′,’Y-m-d’)) | charset(timediff(‘-11-19’, ‘-11-20’)) |

+——————————————–+———————————————–+

| utf8 | binary |

+——————————————–+———————————————–+

mysql> set names gb2312;

mysql> select charset(date_format(‘-11-19′,’Y-m-d’)), charset(timediff(‘-11-19’, ‘-11-20’));

+——————————————–+———————————————–+

| charset(date_format(‘-11-19′,’Y-m-d’)) | charset(timediff(‘-11-19’, ‘-11-20’)) |

+——————————————–+———————————————–+

| gb2312| binary |

+——————————————–+———————————————–+

可以看到,随着通过 SET NAMES 修改 character_set_connection、collation_connection 值,DATE_FORMAT() 函数返回结果的字符集也跟着不一样。在这种情况下,想要正常工作,就需要将结果进行一次字符集转换,例如:

mysql> select date_format(‘-11-19′,’Y-m-d’) > convert(timediff(‘-11-19’, ‘-11-20’) using utf8);

+———————————————————————————————-+

| date_format(‘-11-19′,’Y-m-d’) > convert(timediff(‘-11-19’, ‘-11-20’) using utf8) |

+———————————————————————————————-+

| 1 |

+———————————————————————————————-+

就可以了

P.S,MySQL的版本:5.5.20-55-log Percona Server (GPL), Release rel24.1, Revision 217

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。