#mysql #sql #database #mysql-8.0
Вопрос:
Получение этой ошибки Mysql для всех видов операций обновления
update `servershopcategories` set category_icon_path = 'velocity/category_icon_path/2/D02nx6aqc85HngSy6QC9LdWKtABuDFGb7fNQenuG.png', `servershopcategories`.`updated_at` = '2021-06-22 00:08:05' where `id` = 2;
ERROR 1267 (HY000): Illegal mix of collations (utf8mb4_unicode_ci,IMPLICIT) and (utf8mb4_0900_ai_ci,IMPLICIT) for operation '='
Вот как выглядит конфигурация моей таблицы
mysql> SHOW TABLE STATUS where name like 'servershopcategories' G;
*************************** 1. row ***************************
Name: servershopcategories
Engine: InnoDB
Version: 10
Row_format: Dynamic
Rows: 2
Avg_row_length: 8192
Data_length: 16384
Max_data_length: 0
Index_length: 16384
Data_free: 0
Auto_increment: 3
Create_time: 2021-06-22 00:29:05
Update_time: 2021-06-21 04:01:49
Check_time: NULL
Collation: utf8mb4_unicode_ci
Checksum: NULL
Create_options: row_format=DYNAMIC
Comment:
1 row in set (0.01 sec)
и это структура таблицы
mysql> show full columns from servershopcategories;
-------------------- -------------- -------------------- ------ ----- -------------------------- ---------------- --------------------------------- ---------
| Field | Type | Collation | Null | Key | Default | Extra | Privileges | Comment |
-------------------- -------------- -------------------- ------ ----- -------------------------- ---------------- --------------------------------- ---------
| id | int unsigned | NULL | NO | PRI | NULL | auto_increment | select,insert,update,references | |
| position | int | NULL | NO | | 0 | | select,insert,update,references | |
| image | varchar(191) | utf8mb4_unicode_ci | YES | | NULL | | select,insert,update,references | |
| status | tinyint(1) | NULL | NO | | 0 | | select,insert,update,references | |
| _lft | int unsigned | NULL | NO | MUL | 0 | | select,insert,update,references | |
| _rgt | int unsigned | NULL | NO | | 0 | | select,insert,update,references | |
| parent_id | int unsigned | NULL | YES | | NULL | | select,insert,update,references | |
| created_at | timestamp | NULL | YES | | NULL | | select,insert,update,references | |
| updated_at | timestamp | NULL | YES | | NULL | | select,insert,update,references | |
| display_mode | varchar(191) | utf8mb4_unicode_ci | YES | | products_and_description | | select,insert,update,references | |
| category_icon_path | varchar(500) | utf8mb4_unicode_ci | YES | | NULL | | select,insert,update,references | |
| additional | json | NULL | YES | | NULL | | select,insert,update,references | |
-------------------- -------------- -------------------- ------ ----- -------------------------- ---------------- --------------------------------- ---------
Сначала я подумал, что что-то не так со строкой, которую я даю в операции набора, но удивительно, что даже более простые операции обновления приводят к такой же ошибке, как
mysql> update servershopcategories set position = 2 where id = 2;
ERROR 1267 (HY000): Illegal mix of collations (utf8mb4_unicode_ci,IMPLICIT) and (utf8mb4_0900_ai_ci,IMPLICIT) for operation '='
Я много пробовал, меняя параметры сортировки здесь и там, но я чувствую, что здесь мне чего-то не хватает. И я искал несколько решений в Интернете, ни одно из них, похоже, не работает.
Комментарии:
1. Я бы поспорил на большую кружку пива, что на этом столе неисправен Спусковой крючок.
2. Действительно. Поэтому я импортировал этот пакет, и он запустил миграцию laravel. Теперь трудно понять, для какой части триггера именно возникла проблема.