数据库|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