• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > MySQL中日期比较时遇到的编码问题解决办法

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

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-11

通过本文主要向大家介绍了mysql 当前日期,mysql截取日期,mysql插入日期,mysql 日期函数,mysql 日期格式化等相关知识,希望本文的分享对您有所帮助

今天帮同事处理一个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 '>'</div>
乍一看挺莫名其妙的,查了下手册,发现有这么一段:
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.</div>
也就是说,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                                        |
+--------------------------------------------+-----------------------------------------------+</div>
可以看到,随着通过 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 |
+----------------------------------------------------------------------------------------------+</div>
就可以了

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

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Mysql获取当前日期的前几天日期的方法
  • MySQL中日期比较时遇到的编码问题解决办法

相关文章

  • 2018-12-05mysql-MySQL数据库能转换成SQLServer吗?我有一个MySQL的脚本文件怎么才能在SQLServer里操作
  • 2018-12-05mysql列转行的技巧实例分享
  • 2018-12-05高性能MySQL-详解事务与隔离级别
  • 2017-05-11MySQL字符集的基本类型与统一字符集分析
  • 2018-12-05MySQL之——MySQL Cluster集群搭建详解(基于RPM安装包)
  • 2018-12-05mysql 查询表中平均分最低的班级
  • 2018-12-05Oracle 数据库自动存储管理-安装配置
  • 2018-12-05MySQL高级十四——表的优化
  • 2018-12-05SqlServer 2005 T-SQL Query 学习笔记(1)
  • 2017-05-11MYSQL where 1=1判定中的作用说明

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • mysql教程:mysql创建和删除索引
    • MySQL中char与varchar数据类型选择原则
    • mysql触发器实现oracle物化视图示例代码
    • 关于MySql链接url参数的设置
    • 两大步骤教您开启MySQL 数据库远程登陆帐号的方法
    • [MySQL][ODBC 3.51 Driver]Access denied for user: 'root@local
    • 常见数据库系统比较 Oracle数据库
    • mysql中RAND()随便查询记录效率问题和解决办法分享
    • 如何远程修复损坏的mysql数据库
    • MySQL essential版本和普通版本有什么区别?

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有