Я пытаюсь обновить таблицу, которая работала нормально минуту назад, но теперь я ударил ошибку, которая у меня в прошлом была крайне неудобной.
09:32:57 Copying rows caused a MySQL error 1300:
Level: Warning
Code: 1300
Message: Invalid utf8mb4 character string: '94C494'
Есть ли опция или что-то такое, чтобы я мог игнорировать эти предупреждения? В конце концов, это всего лишь предупреждение, поэтому MySQL все еще имеет возможность двигаться вперед и копировать строки в любом случае.
Другие решения также были бы прекрасны, как способ найти оскорбительное значение в таблице или удалить недопустимые фрагменты или просто что-то, чтобы я мог изменить таблицу.
Мой Googling о том, как найти/заменить сломанные последовательности utf8 в MySQL, приносит мне эти ссылки (это не так полезно)
Я даже пробовал искать все столбцы, где шестнадцатеричный содержит недопустимую последовательность и все равно как-то не повезло
select * from 'notifications'
where hex('Description') like '%94C494%'
or hex('Title') like '%94C494%'
or hex('NotificationID') like '%94C494%'
or hex('ToUserID') like '%94C494%'
or hex('FromUserID') like '%94C494%'
or hex('Link') like '%94C494%'
or hex('Icon') like '%94C494%';
MySQL - это версия 5.7.18-15-57-log и pt-online-schema-change 3.0.8
Даже незнакомец, я решил юмориться и поискать ВСЕ столбцы (а не только utf8mb4), и я получил строки! Но единственные строки, которые я получил, были из моих двоичных столбцов? Почему в двоичном столбце имеет место недействительная последовательность utf8? Теперь я думаю, что это может быть ошибка с инструментом
select * ,hex('notificationid'), hex('notificationbid'), hex('fromuserid'), hex('touserid'), hex('title'), hex('description'), hex('read'), hex('datetimeadded'), hex('link'), hex('icon'), hex('shown'), hex('_linkdescriptionsha256'), hex('_touseridlinkdescription+sha3-224')
from 'notifications'
where hex('notificationid') like '%94C494%'
or hex('notificationbid') like '%94C494%'
or hex('fromuserid') like '%94C494%'
or hex('touserid') like '%94C494%'
or hex('title') like '%94C494%'
or hex('description') like '%94C494%'
or hex('read') like '%94C494%'
or hex('datetimeadded') like '%94C494%'
or hex('link') like '%94C494%'
or hex('icon') like '%94C494%'
or hex('shown') like '%94C494%'
or hex('_linkdescriptionsha256') like '%94C494%'
or hex('_touseridlinkdescription+sha3-224') like '%94C494%';
После работы с поддержкой Percona по этой проблеме мы в конечном итоге привели к созданию этого билета: https://jira.percona.com/browse/PT-1528
Трюк для игнорирования проблем с сортировкой (или работа с этой ошибкой) заключается в добавлении --charset binary
флага --charset binary
к команде изменения pt-online-schema-change
.
Кажется, произойдет, когда первичный ключ является двоичным столбцом, а набор символов либо установлен в utf8 (mb4), либо выводится как один из параметров MySQL.