Хорошо, вот подсказка: если вы не знаете, что делаете, не делайте этого! У меня есть интернет-магазин, который я как-то сломал, и я думаю, что это связано с изменением меня, после прочтения здесь на этом сайте, насколько хороши utf8mb4_unicode_ci
.
Проблема заключается в том, что когда мои клиенты с письмами типа ÅÄÖ или é á и т.д. Покупают и платят, оплата проходит, но WooCommerce каким-то образом не обрабатывает ее и отправляет мне "отмененный заказ", хотя он был оплачен. Теперь причина, по которой я думаю, что мое изменение изменило это, потому что те, кто ломаются, являются теми, у кого эти странные буквы. Например, мой клиент "Andersén"
отображается на моей платежной накладной: "AndersÃn"
Что я могу сделать?
Если вы не знаете, что делаете, не делайте этого! -- В точку! И CHARACTER SETs
в MySQL - это такое CHARACTER SETs
гнездо вещей, которое может пойти не так.
причина
Ã
для é
, вероятно, Mojibake.
Есть 4 (иногда 5) этапа, на которых вы могли бы перепутаться. Есть 2 (возможно, более) способа, которыми вы могли бы усугубить проблему, когда пытались ее исправить.
Какие у вас были байты? é
в latin1 - один байт, hex E9
. В utf8 (и utf8mb4) это 2 байта, hex C3A9
. (Для Mojibake у вас, вероятно, был C3A9
.)
Покажите нам SET NAMES
(или set_charset()
или...) в вашем клиенте. В конечном итоге это должно быть "utf8mb4"; с чего это начиналось? Mojibake может произойти для "latin1" или "utf8". В конечном итоге это должно быть utf8/utf8mb4.
Какой CHARACTER SET
задан столбец/таблица? В конечном итоге это должно быть utf8/utf8mb4, но преобразование существующих данных может быть сложным.
<meta...charset=...>
вероятно, отсутствует или iso...; в конечном итоге это должно быть UTF-8
(с -
, нет mb4
).
Если вам повезло, а # 4 был единственным элементом не-utf8, добавление/изменение метатега должно быть достаточным.
диагностики
Пожалуйста, сделайте это, чтобы мы могли понять, насколько плоха ситуация:
SELECT col, HEX(col) FROM tbl WHERE ...
для "Андерсена" (или что-то еще).
416E64657273E96E
- чистый латинский; Я не ожидаю, что это произойдет; 416E64657273C3A96E
- Правильно сохранен как utf8/utf8mb4 (но неправильно извлечен и/или визуализирован); 416E64657273C383C2A96E
- "двойное кодирование" - беспорядочная ситуация.
Так как последние два случая, вероятно, могут превратиться в AndersÃn
, мне нужно знать, перед чем начать, как исправить это.
Вот мой незавершенный сборник о том, как справляться со всеми проблемами с кодировкой. Он включает два способа: ALTER
table; они по разным причинам. Выполнение неправильного будет только сложной проблемой.
Cure TBD