国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

MySQL中DATE_FORMATE函數使用時的注意點

2020-01-18 22:55:49
字體:
來源:轉載
供稿:網友

今天幫同事處理一個SQL(簡化過后的)執(zhí)行報錯:

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 '>'

乍一看挺莫名其妙的,查了下手冊,發(fā)現有這么一段:

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 |+----------------------------------------------------------------------------------------------+

就可以了 :)

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 祁连县| 静安区| 襄樊市| 闵行区| 枝江市| 潜山县| 神农架林区| 葵青区| 太谷县| 北流市| 丰顺县| 高安市| 厦门市| 盘山县| 井陉县| 邯郸市| 轮台县| 廉江市| 上栗县| 绍兴市| 突泉县| 江北区| 珲春市| 高邑县| 青浦区| 蓬安县| 云和县| 水城县| 富阳市| 云阳县| 台东市| 富锦市| 望城县| 休宁县| 方正县| 福建省| 临潭县| 博乐市| 柘荣县| 文化| 靖安县|