今天帮同事处理一个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函数内置字符集的坑相关推荐

  1. MySQL中DATE_FORMATE函数内置字符集解析

    今天帮同事处理一个SQL(简化过后的)执行报错: 代码如下 复制代码 mysql> select date_format('2013-11-19','Y-m-d') > timediff( ...

  2. Python学习8 函数 匿名函数 内置函数

    转换相关的方法-eval 转换相关的方法-json 函数基本语法大纲 函数概念 示例: 题目: 函数的参数 def f(x,y=1,*z,**abc):print(x,y,z,abc,sep=&quo ...

  3. 学习日记0802函数递归,三元表达式,列表生成式,字典生成式,匿名函数+内置函数...

    1 函数的递归 函数的递归调用时函数嵌套调用的一种特殊形式,在调用的过程中又直接或者间接的调用了该函数 函数的递归调用必须有两个明确的阶段: 1 回溯:函数一次次的调用下去每一次调用,问题的规模都应该 ...

  4. python - - 函数 - - 内置函数和匿名函数

    目录 内置函数 匿名函数 本章小结 相关练习题 1,内置函数 python里的内置函数.截止到python版本3.6.2,现在python一共为我们提供了68个内置函数. Built-inFuncti ...

  5. javaScript内置函数(内置函数,内置关键字)

    javaScript内置函数(内置函数,内置关键字)js的内置对象是js自带,封装了一些常用的方法.常用的js内置对象有:String,Date,Array,Math等:js内置函数是浏览器内核自带的 ...

  6. 函数【七】高阶函数/内置函数

    python函数式编程 高阶函数:就是把函数当成参数传递的一种函数 1.函数名可以进行赋值: 2.函数名可以作为函数参数,还可以作为函数的返回值: a.函数是第一类对象 b.函数可以被赋值 c.可以被 ...

  7. mysql中的内置函数

    mysql内置函数列表可以从mysql官方文档查询,这里仅分类简单介绍一些可能会用到的函数. 1 数学函数 abs(x) pi() mod(x,y) sqrt(x) ceil(x)或者ceiling( ...

  8. mysql eva结构,内置函数和匿名函数(摘自Eva_J女神)

    阅读目录 楔子 在讲新知识之前,我们先来复习复习函数的基础知识. 问:函数怎么调用? 函数名() 如果你们这么说...那你们就对了!好了记住这个事儿别给忘记了,咱们继续谈下一话题... 来你们在自己的 ...

  9. mysql 聚合函数内比较运算符_关于常用 MYSQL 聚合函数,其他函数 ,类型转换,运算符 总结...

    /* 关于MYSQL 聚合函数,其他函数 ,类型转换,运算符 总结,*/ -- 1 运算符优先级  /* 12.1.1. 操作符优先级 以下列表显示了操作符优先级的由低到高的顺序.排列在同一行的操作符 ...

最新文章

  1. php5.3+ 安装(mysqlnd )
  2. 题目1132:与7无关的数
  3. 前端小技巧-定位的活学活用之仿淘宝列表
  4. 贪心算法之最小堆实现霍夫曼编码
  5. heartbeat+iscsi+mysql实现双机高可用
  6. php ob缓存原理介绍
  7. MS Sql Server 数据库或表修复(DBCC CHECKDB)
  8. VC++ Tab Control控件的使用
  9. python之os.listdir
  10. 如何在macOS Big Sur的Voice Memos中使用增强录音和智能文件夹?
  11. 后端研发菜鸟成长记 第一章 入门 之 存活下来
  12. 纸鸢|物联网云平台小工具集合常见 MQTT 客户端比较
  13. matlab 半正定规划,半正定规划
  14. 4.1 android 头像,微商抠图软件换头像app
  15. 在虚拟机中使用软路由进行组网
  16. java调用阿里云短信服务器-发送短信
  17. Πολιτική απορρήτου
  18. 元素选择器(type selectors)
  19. 艾莫基IMG老板李洪波欠销售提成不给,反而颠倒黑白,抹黑对方
  20. 微小说获奖作品50则

热门文章

  1. 「AI不惑境」网络深度对深度学习模型性能有什么影响?
  2. SAP HUMO VLMOVE不支持E库存发货到成本中心
  3. 什么样的NLP库,可以支持53种语言?
  4. 2019年智能手机AI要被深度开发,这五项技术将是重点
  5. 一文搞懂RNN(循环神经网络)
  6. python中的装饰器介绍
  7. 干货丨机器学习必备:前20名Python人工智能和机器学习开源项目
  8. 人工智能落地,商业化比技术更重要
  9. 《数学之美》第2章自然语言处理从规则到统计
  10. 2021年突破人类想象力的6大科学纪录