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 '>'
| 函數 | 返回類型 | 字符集屬性 | 受什麼影響 |
|---|---|---|---|
| DATE_FORMAT | VARCHAR | 有字符集/校對集 | character_set_connection, collation_connection |
| TIMEDIFF | TIME | 二進制 (binary) | 無字符集屬性 |
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
DATE_FORMAT 字符集隨連接字符集變化,TIMEDIFF 恒為 binary。
SELECT DATE_FORMAT('2013-11-19', '%Y-%m-%d')
> CONVERT(TIMEDIFF('2013-11-19', '2013-11-20') USING utf8);
-- 正常返回 1
-- CAST 轉換(同 CONVERT) SELECT DATE_FORMAT(dt, '%Y-%m-%d') > CAST(TIMEDIFF(dt1, dt2) AS CHAR CHARACTER SET utf8); -- 統一轉 binary(最通用) SELECT CAST(DATE_FORMAT(dt, '%Y-%m-%d') AS BINARY) > CAST(TIMEDIFF(dt1, dt2) AS BINARY);
| 有字符集屬性 | 無字符集屬性 |
|---|---|
| DATE_FORMAT | TIMEDIFF / TIMESTAMPDIFF |
| CONCAT | SUBSTRING / LEFT / RIGHT |
| UPPER / LOWER | HEX / UNHEX |
| CAST(... AS CHAR) | CAST(... AS BINARY) |
CHARSET() / COLLATION() 函數調試表達式字符集屬性測試環境:Percona Server 5.5.20-55-log (GPL), Release rel24.1, Revision 217