Проблемы с кодировкой (utf8) при импорте данных в MySql — кракозябры

Битые символы в базе данных образуются, в большинстве случаев, из-за несовпадения кодировок в файле источнике, клиенте БД или таблице БД. Пройдемся по проблемным местам, один из пунктов ниже обычно помогает решать проблемы с «кракозябрями».

1. Файл-источник данных.

С этим пунктом все просто, текстовые данные в файле нужно хранить в utf8. Проверить кодировку можно в большинстве популярных IDE, например, в PhpStorm или текстовом редакторе наподобие Notepad++.

Если нет прямого доступа к БД, то в файл-источник данных следует прописать:

SET NAMES 'utf8' COLLATE 'utf8_general_ci'; -- Для utf8

или

SET NAMES 'utf8mb4' COLLATE 'utf8mb4_general_ci'; -- Для utf8mb4

2. Кодировка и формат сопоставления данных в таблице.

Вероятнее всего вы используете utf8 (он же utf8mb3) или utf8mb4 для хранения данных в MySql. Поэтому при создании таблиц желательно напрямую указывать это, т.к. не всегда общие настройки БД разрешается менять.

Для utf8:

CREATE TABLE `example_table`
(
    id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    example_field VARCHAR(255) NOT NULL
) CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE=InnoDB;

Для utf8mb4:

CREATE TABLE `example_table`
(
    id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    example_field VARCHAR(255) NOT NULL
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE=InnoDB;

3. Импорт данных из файла-источника.

При импорте тоже желательно указывать кодировку.

Для utf8:

mysql -u USER_NAME -p --default-character-set=utf8 DB_NAME < SOURCE_FILE.sql

Для utf8mb4:

mysql -u USER_NAME -p --default-character-set=utf8mb4 DB_NAME < SOURCE_FILE.sql

4. Веб-интерфейсы.

Иногда требуется заполнять БД из веб-интерфейсов и в этом случае стоит проверять отправляемую кодировку с сервера в заголовках и HTML-коде.

HTML:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

PHP:

header('Content-Type: text/html; charset=utf-8');

Полезные команды

Отображение форматов сопоставления данных в MySql:

SHOW VARIABLES LIKE 'collation%';

Отображение настроек кодировок:

SHOW VARIABLES LIKE 'character%';

15.03.2022

Категория(-и): Сниппеты

#

Добавить комментарий