问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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

发布网友 发布时间:2022-04-21 06:28

我来回答

1个回答

热心网友 时间:2022-04-08 03:12

今天帮同事处理一个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
|
+----------------------------------------------------------------------------------------------+
就可以了
:)
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
大庆读专业的地方有哪些,就是像哈尔滨哪里,全都是学技术,比如拉丁,爵士... 如何修改朋友圈标签内容 ...是否允许照相机访问,不小心点了【记住我的选择】+【拒绝】该怎么解除... 豆芽炒肉(豆芽炒肉的家常做法) 工程勘察设计资质代办步骤有哪些 工程设计专项资质变更代办流程和资料 工程设计资质代办步骤有哪些 设计院资质代办步骤有哪些 Excel也能增加“后悔”次数 excel如何修改增加撤销次数 求脑梗脑出血方面专家解答!!!十分感谢!!! 脑梗塞患者急求助 急.脑梗塞。。在线等。。。 关于脑血栓的问题 脑梗死是什么意思? 为什么我奶奶脑梗塞医生不准溶栓呢??? 脑梗死为什么要溶栓 脑梗一打溶栓针后就没有后遗证了吗? 急怎么读 脑梗赛初期患者要注意什么 溶栓是脑梗塞最佳治疗方法吗? 请问脑梗溶栓后,鼻子出血是怎么回事 脑梗塞的治疗方法 预防脑梗塞 脑梗一打溶栓针后能减少后遗证吗? 我父亲昏迷六天了,医生诊断是脑梗死,右侧小脑栓塞,情况很严重,由于用了溶栓药物导致消化道出血 脑梗塞后出血 急怎么读 急怎么读 我想提升个人的职业形象,有哪些好的方法? 评价的意思 mysql中DATE_FORMAT的使用报错 mysql 的DATE_FORMAT 函数 听说比较慢,是吗 404 Not Found mysql中如何把字符串转换成日期类型 mysql 时间格式化 mysql时间格式化 php如何连接mysqlphp如何连接mysql数据库 MySQL的DATE_FORMAT()用法 怎样将MySQL数据导出到Excel表中 mysql如何修改日期格式? php,mysql中,date_format(),as,处理过的mysql语句,不能输出数据 mysql怎么一次性设置日期格式 怎么在mysql中设置时间格式 怎么在mysql中插入表记录? mysql 自动分月统计 mysql判断日期是星期几 怎样在MySQL中操作日期 oppo手机充电器都是一样的吗 oppo手机的充电器都可以通用吗? OPPOk9和oppok9pro充电器一样吗?