萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL DATE_FORMAT 與 TIMEDIFF 字符集衝突導致比較報錯解析

執行 SELECT DATE_FORMAT('2013-11-19','%Y-%m-%d') > TIMEDIFF('2013-11-19', '2013-11-20'); 時拋出 Illegal mix of collations 錯誤。根本原因是 DATE_FORMAT() 回傳帶字符集的字串,而 TIMEDIFF() 回傳二進制字串,字符集不一致導致無法比較。

驗證字符集差異

SET NAMES utf8;
SELECT CHARSET(DATE_FORMAT('2013-11-19','%Y-%m-%d')), CHARSET(TIMEDIFF('2013-11-19', '2013-11-20'));
-- 結果:utf8 | binary

SET NAMES gb2312;
SELECT CHARSET(DATE_FORMAT('2013-11-19','%Y-%m-%d')), CHARSET(TIMEDIFF('2013-11-19', '2013-11-20'));
-- 結果:gb2312 | binary

解決方案

使用 CONVERT() 將 TIMEDIFF() 結果轉換為相同字符集:

SELECT DATE_FORMAT('2013-11-19','%Y-%m-%d') > CONVERT(TIMEDIFF('2013-11-19', '2013-11-20') USING utf8);

此外,文末附上 DATE_FORMAT 完整格式符號對照表供參考。

copyright © 萬盛學電腦網 all rights reserved