MySQL DATE_FORMATE函数内置字符集的坑
今天帮同事处理一个SQL(简化过后的)执行报错:
mysql> select date_format('2013-11-19','Y-m-d') > timediff('2013-11-19', '2013-11-20'); ERROR 1267 (HY000): Illegal mix of collations (utf8_general_ci,COERCIBLE) and (latin1_swedish_ci,NUMERIC) for operation '>'
乍一看挺莫名其妙的,查了下手册,发现有这么一段:
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('2013-11-19','Y-m-d')), charset(timediff('2013-11-19', '2013-11-20'));+--------------------------------------------+-----------------------------------------------+| charset(date_format('2013-11-19','Y-m-d')) | charset(timediff('2013-11-19', '2013-11-20')) |+--------------------------------------------+-----------------------------------------------+| utf8 | binary |+--------------------------------------------+-----------------------------------------------+ mysql> set names gb2312;mysql> select charset(date_format('2013-11-19','Y-m-d')), charset(timediff('2013-11-19', '2013-11-20'));+--------------------------------------------+-----------------------------------------------+| charset(date_format('2013-11-19','Y-m-d')) | charset(timediff('2013-11-19', '2013-11-20')) |+--------------------------------------------+-----------------------------------------------+| gb2312 | binary |+--------------------------------------------+-----------------------------------------------+
可以看到,随着通过 SET NAMES 修改 character_set_connection、collation_connection 值,DATE_FORMAT() 函数返回结果的字符集也跟着不一样。在这种情况下,想要正常工作,就需要将结果进行一次字符集转换,例如:
mysql> select date_format('2013-11-19','Y-m-d') > convert(timediff('2013-11-19', '2013-11-20') using utf8);+----------------------------------------------------------------------------------------------+| date_format('2013-11-19','Y-m-d') > convert(timediff('2013-11-19', '2013-11-20') using utf8) |+----------------------------------------------------------------------------------------------+| 1 |+----------------------------------------------------------------------------------------------+
就可以了 :)
P.S,MySQL的版本:5.5.20-55-log Percona Server (GPL), Release rel24.1, Revision 217
--------------------------------------分割线--------------------------------------
知数堂 (http://zhishuedu.com)培训是由资深MySQL专家叶金荣、吴炳锡联合推出的专业优质培训品牌,主要有MySQL DBA实战优化和Python运维开发课程,是业内最有良心、最有品质的培训课程。
本文出自 “老叶茶馆” 博客,请务必保留此出处http://imysql.blog.51cto.com/1540006/1879883
转载于:https://blog.51cto.com/imysql/1880059
MySQL DATE_FORMATE函数内置字符集的坑相关推荐
- MySQL中DATE_FORMATE函数内置字符集解析
今天帮同事处理一个SQL(简化过后的)执行报错: 代码如下 复制代码 mysql> select date_format('2013-11-19','Y-m-d') > timediff( ...
- Python学习8 函数 匿名函数 内置函数
转换相关的方法-eval 转换相关的方法-json 函数基本语法大纲 函数概念 示例: 题目: 函数的参数 def f(x,y=1,*z,**abc):print(x,y,z,abc,sep=&quo ...
- 学习日记0802函数递归,三元表达式,列表生成式,字典生成式,匿名函数+内置函数...
1 函数的递归 函数的递归调用时函数嵌套调用的一种特殊形式,在调用的过程中又直接或者间接的调用了该函数 函数的递归调用必须有两个明确的阶段: 1 回溯:函数一次次的调用下去每一次调用,问题的规模都应该 ...
- python - - 函数 - - 内置函数和匿名函数
目录 内置函数 匿名函数 本章小结 相关练习题 1,内置函数 python里的内置函数.截止到python版本3.6.2,现在python一共为我们提供了68个内置函数. Built-inFuncti ...
- javaScript内置函数(内置函数,内置关键字)
javaScript内置函数(内置函数,内置关键字)js的内置对象是js自带,封装了一些常用的方法.常用的js内置对象有:String,Date,Array,Math等:js内置函数是浏览器内核自带的 ...
- 函数【七】高阶函数/内置函数
python函数式编程 高阶函数:就是把函数当成参数传递的一种函数 1.函数名可以进行赋值: 2.函数名可以作为函数参数,还可以作为函数的返回值: a.函数是第一类对象 b.函数可以被赋值 c.可以被 ...
- mysql中的内置函数
mysql内置函数列表可以从mysql官方文档查询,这里仅分类简单介绍一些可能会用到的函数. 1 数学函数 abs(x) pi() mod(x,y) sqrt(x) ceil(x)或者ceiling( ...
- mysql eva结构,内置函数和匿名函数(摘自Eva_J女神)
阅读目录 楔子 在讲新知识之前,我们先来复习复习函数的基础知识. 问:函数怎么调用? 函数名() 如果你们这么说...那你们就对了!好了记住这个事儿别给忘记了,咱们继续谈下一话题... 来你们在自己的 ...
- mysql 聚合函数内比较运算符_关于常用 MYSQL 聚合函数,其他函数 ,类型转换,运算符 总结...
/* 关于MYSQL 聚合函数,其他函数 ,类型转换,运算符 总结,*/ -- 1 运算符优先级 /* 12.1.1. 操作符优先级 以下列表显示了操作符优先级的由低到高的顺序.排列在同一行的操作符 ...
最新文章
- php5.3+ 安装(mysqlnd )
- 题目1132:与7无关的数
- 前端小技巧-定位的活学活用之仿淘宝列表
- 贪心算法之最小堆实现霍夫曼编码
- heartbeat+iscsi+mysql实现双机高可用
- php ob缓存原理介绍
- MS Sql Server 数据库或表修复(DBCC CHECKDB)
- VC++ Tab Control控件的使用
- python之os.listdir
- 如何在macOS Big Sur的Voice Memos中使用增强录音和智能文件夹?
- 后端研发菜鸟成长记 第一章 入门 之 存活下来
- 纸鸢|物联网云平台小工具集合常见 MQTT 客户端比较
- matlab 半正定规划,半正定规划
- 4.1 android 头像,微商抠图软件换头像app
- 在虚拟机中使用软路由进行组网
- java调用阿里云短信服务器-发送短信
- Πολιτική απορρήτου
- 元素选择器(type selectors)
- 艾莫基IMG老板李洪波欠销售提成不给,反而颠倒黑白,抹黑对方
- 微小说获奖作品50则