MySQL中DATE_FORMATE函数使用时的注意点

 更新时间:2015年05月09日 10:23:05   投稿:goldensun  
这篇文章主要介绍了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 |
+----------------------------------------------------------------------------------------------+

就可以了 :)

相关文章

  • mysql 8.0.11 macos10.13安装配置方法图文教程

    mysql 8.0.11 macos10.13安装配置方法图文教程

    这篇文章主要为大家详细介绍了mysql 8.0.11 macos10.13安装配置方法图文教程,mysql数据库安装及配置环境变量,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • MySQL之临时表的实现示例

    MySQL之临时表的实现示例

    MySQL临时表是存储在内存或者磁盘上的临时数据表,它们的生命周期只限于当前数据库会话,临时表的创建和使用方式与普通表类似,本文就详细的介绍了MySQL之临时表,感兴趣的可以了解一下
    2023-08-08
  • 如何查看自己电脑MySQL是否安装成功

    如何查看自己电脑MySQL是否安装成功

    执行mysql程序后我们需要对mysql数据库进行验证,检查其是否安装成功,这篇文章主要给大家介绍了关于如何查看自己电脑MySQL是否安装成功的相关资料,需要的朋友可以参考下
    2023-11-11
  • MySQL 视图(View)原理解析

    MySQL 视图(View)原理解析

    本篇重点讲述视图是如何实现的,以及视图如何和查询优化器交互,从而我们可以根据这些知识了解如何通过视图提高性能。
    2021-05-05
  • 浅析Mysql和Oracle分页的区别

    浅析Mysql和Oracle分页的区别

    Mysql使用limit分页而Oracle使用rownum分页,下面通过本文给大家介绍Oracle和Mysql分页的区别,需要的的朋友参考下吧
    2022-12-12
  • MySQL 双向备份的实现方法

    MySQL 双向备份的实现方法

    这篇文章主要介绍了MySQL 双向备份的实现方法,即两个 MySQL 服务都是 Master,其中任意一个服务又是另一个服务的 Slave,感兴趣的可以了解一下
    2019-04-04
  • mysql允许远程连接的方法

    mysql允许远程连接的方法

    这篇文章主要介绍了mysql允许远程连接的方法,内容很详细,感兴趣的小伙伴们可以参考一下
    2015-12-12
  • MySQL5.6的zip包安装教程详解

    MySQL5.6的zip包安装教程详解

    这篇文章主要介绍了MySQL5.6的zip包安装教程,需要的朋友可以参考下
    2018-11-11
  • mysql Access denied for user ‘root’@’localhost’ (using password: YES)解决方法

    mysql Access denied for user ‘root’@’localhost’ (using passw

    这篇文章主要介绍了mysql Access denied for user ‘root’@’localhost’ (using password: YES)解决方法,本文给出详细的解决步骤及操作注释,需要的朋友可以参考下
    2015-07-07
  • MAC下MySQL初始密码忘记怎么办

    MAC下MySQL初始密码忘记怎么办

    MySQL初始密码忘记如何解决,这篇文章主要介绍了MAC下MySQL忘记初始密码的解决办法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-02-02

最新评论