執行 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 完整格式符號對照表供參考。