Изменены таблицы WC в utf8mb4 Unicode и сломанный сайт

-1

Хорошо, вот подсказка: если вы не знаете, что делаете, не делайте этого! У меня есть интернет-магазин, который я как-то сломал, и я думаю, что это связано с изменением меня, после прочтения здесь на этом сайте, насколько хороши utf8mb4_unicode_ci.

Проблема заключается в том, что когда мои клиенты с письмами типа ÅÄÖ или é á и т.д. Покупают и платят, оплата проходит, но WooCommerce каким-то образом не обрабатывает ее и отправляет мне "отмененный заказ", хотя он был оплачен. Теперь причина, по которой я думаю, что мое изменение изменило это, потому что те, кто ломаются, являются теми, у кого эти странные буквы. Например, мой клиент "Andersén" отображается на моей платежной накладной: "AndersÃn"

Что я могу сделать?

  • 1
    Где вы внесли изменения? Вы пытались отменить изменения?
  • 0
    В PhPМядмин! Я зашел в стол, нажал «Operaitons» и изменил коалицию. Сделал это для всех таблиц, и теперь внезапно я получаю их как отмененные, когда символы чужие. Нужно ли что-то делать с кодировкой? Как установить Charse для всех столов?
Показать ещё 3 комментария
Теги:
database
woocommerce
utf-8

1 ответ

0

Если вы не знаете, что делаете, не делайте этого! -- В точку! И CHARACTER SETs в MySQL - это такое CHARACTER SETs гнездо вещей, которое может пойти не так.

причина

à для é, вероятно, Mojibake.

Есть 4 (иногда 5) этапа, на которых вы могли бы перепутаться. Есть 2 (возможно, более) способа, которыми вы могли бы усугубить проблему, когда пытались ее исправить.

  1. Какие у вас были байты? é в latin1 - один байт, hex E9. В utf8 (и utf8mb4) это 2 байта, hex C3A9. (Для Mojibake у вас, вероятно, был C3A9.)

  2. Покажите нам SET NAMES (или set_charset() или...) в вашем клиенте. В конечном итоге это должно быть "utf8mb4"; с чего это начиналось? Mojibake может произойти для "latin1" или "utf8". В конечном итоге это должно быть utf8/utf8mb4.

  3. Какой CHARACTER SET задан столбец/таблица? В конечном итоге это должно быть utf8/utf8mb4, но преобразование существующих данных может быть сложным.

  4. <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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню