Как определить ошибку кодирования данных utf8 и исправить ее в MySql? - PullRequest
0 голосов
/ 08 апреля 2020

У меня есть веб-форма, написанная на Perl, которая сохраняет пользовательский ввод на нескольких языках в базу данных MySQL. Хотя он прекрасно работал, сохраняя и отображая все символы без проблем, в PHPMyAdmin символы всегда отображаются с ошибками. Однако я проигнорировал это, поскольку веб-сайт отображал символы ОК.

Теперь я только недавно переместил веб-сайт на VPS, и база данных, по-видимому, ввела в действие кодировку ut8mb4, поэтому теперь она отображает ошибки символов на сайт. Я не эксперт и считаю всю область кодирования довольно запутанной. Мой вопрос: как я могу:

а) определить, как мои данные на самом деле кодируются в моей таблице?

б) правильно преобразовать их в utf8mb4, чтобы они правильно отображались в PHPMyAdmin и на моем веб-сайте?

На всех HTML страницах используется объявление charset=utf8. MySQL соединение использует mysql_enable_utf8 => 1. Таблица в моей исходной базе данных была установлена ​​на utf8_general_ci сопоставление. Исходная сортировка базы данных (я только что заметил) была установлена ​​на latin1_swedish_ci. Новая база данных И таблица сопоставлений utf8mb4_general_ci. Заранее спасибо.

1 Ответ

0 голосов
/ 10 апреля 2020

SHOW CREATE TABLE сообщит вам значение по умолчанию CHARACTER SET для таблицы. Для любого столбца (столбцов), который переопределяет значение по умолчанию, в столбце будет указано его значение.

Однако в столбце может быть мусор. Многие пользователи сталкивались с этой проблемой, когда они хранили utf8 байтов в столбце latin1. Это приводит к «Mojobake» или «двойному кодированию».

Единственный способ узнать, что на самом деле хранится , - SELECT HEX(col). Западноевропейские акцентированные символы будут

  • один байт для символа latin1, хранящегося в столбце latin1.
  • 2 байта для символа utf8, хранящегося в 1 символе utf8 или в 2 символах latin1.
  • несколько байтов для "двойного кодирования" при преобразовании дважды.

Дополнительные обсуждения: Проблема с символами UTF-8; то, что я вижу, не то, что я сохранил

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...