Прекарах половин ден в търсене на отговори на ужасяващата грешка „Незаконно смесване на съпоставки“. Открих, че някои колони в моята база данни не са специално подредени utf8_unicode_ci . Изглежда, че mysql имплицитно е съпоставил тези колони utf8_general_ci .
По-конкретно, изпълнението на заявка „SHOW CREATE TABLE table1“ изведе нещо като следното:
| таблица1 | СЪЗДАВАНЕ НА ТАБЛИЦА table1
(id
int(11) NOT NULL,col1
varchar(4) CHARACTER SET utf8 NOT NULL,col2
int(11) NOT NULL,PRIMARY KEY (photo_id
,tag
)) ENGINE=InnoDB ПО ПОДРАЗБИРАНЕ CHARSET=utf8 COLLATE=utf8_unicode_ci |
Обърнете внимание на реда 'col1' varchar(4) CHARACTER SET utf8 NOT NULL няма указано съпоставяне. След това изпълних следната заявка:
ALTER TABLE table1 CHANGE col1 col1 VARCHAR(4) CHARACTER SET utf8COLLATE utf8_unicode_ci NOT NULL;
Това реши грешката ми „Незаконно съчетаване на съпоставки“. Надяваме се, че това може да помогне на някой друг.