Битые символы в базе данных образуются, в большинстве случаев, из-за несовпадения кодировок в файле источнике, клиенте БД или таблице БД. Пройдемся по проблемным местам, один из пунктов ниже обычно помогает решать проблемы с «кракозябрями».
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%';
Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.