在.sql文件我有以下幾點:MySQL的「排序規則的非法組合」使用變量從源文件
SET @campaigns = "'9c943c24-f636-11e3-98bd-02f651afdab5','7ca1cf19-f562-11e3-98bd-02f651afdab5'";
select * from campaigns
where id in (@campaigns);
表campaigns
中定義爲:
CREATE TABLE `campaigns` (
`id` varchar(36) COLLATE utf8_unicode_ci NOT NULL,
# column defs snipped #
PRIMARY KEY (`id`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
如果我連接到我的本地MySQL實例通過命令行並試圖執行上述文件:
$ mysql -h localhost -u usename -ppassword
mysql> use mydatabase;
mysql> source myfile.sql
我得到以下錯誤:
ERROR 1267 (HY000): Illegal mix of collations (utf8_unicode_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT) for operation '='
如果我改變查詢(我認爲)指定歸類:
select * from campaigns
where id COLLATE utf8_unicode_ci in (@campaigns);
的響應是:
Query OK, 0 rows affected (0.00 sec)
Empty set (0.00 sec)
如果我把可變內容直接進入查詢:
select * from campaigns
where id in ('9c943c24-f636-11e3-98bd-02f651afdab5','7ca1cf19-f562-11e3-98bd-02f651afdab5');
我得到預期的兩個結果返回。
發生了什麼事?我已經閱讀了幾個關於mysql整理和類似錯誤的stackoverflow線程,我仍然無法理解爲什麼我的變量沒有像我期望的那樣工作。
嗨 - 非常感謝。我會研究一種替代方法來完成我的IN()查詢。這裏的炭/整理設置: 'character_set_client字符\t \t utf8' '是character_set_connection \t utf8' 'character_set_database \t \t latin1' 'character_set_filesystem \t \t binary' 'character_set_results \t \t utf8' 'character_set_服務器\t \t latin1' 'character_set_system \t \t utf8' 'character_sets_dir \t \t \t /應用/甲基苯丙胺/庫/股/字符集/' 'collation_connection是\t utf8_general_ci' 'collation_database查看\t latin1_swedish_ci' 'collation_server \t latin1_swedish_ci' – Wintermute
修復'IN( )'會(我認爲)使排序問題消失。 –