Найти тему

Проблема с кодировкой в таблице БД MySQL

Бывает так что в таблице вместо текста в ячейках отображаются знаки вопроса:

Таблица b_xml_tree
Таблица b_xml_tree

Скорей всего не настроено сопоставление в MySQL и при создании новых таблиц они будут созданы в кодировке по-умолчанию.
Посмотрим какое сопоставление в таблице b_xml_tree, для этого в SQL запросе набираем:

SHOW TABLE STATUS WHERE Name LIKE 'b_xml_tree';

Данные о таблице b_xml_tree
Данные о таблице b_xml_tree

Видим что сопоставление latin1_swedish_ci
Сделаем поиск по базе всех таблиц с таким сопоставлением:

SELECT TABLE_SCHEMA, TABLE_NAME, TABLE_COLLATION
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_COLLATION LIKE 'latin1%';

Таблицы с неверным сопоставлением
Таблицы с неверным сопоставлением

Для того чтобы конвертировать сопоставление, делаем такой запрос:

ALTER TABLE `b_xml_tree` CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci

Таблицы теперь с корректным сопоставлением и данные будут записываться верно.

__________________________________________________________________

Если у вас хостинг и вы не можете поменять настройки MySQL, при создании таблицы пользуйтесь запросами вида:

CREATE TABLE table_name(
ID INT(11) NOT NULL,
DESCRIPTION VARCHAR(20) DEFAULT NULL
)
ENGINE = INNODB
CHARACTER SET utf8
COLLATE utf8_unicode_ci;

Если у вас свой сервер, то в файле конфигурации MySQL (/etc/my.cnf или /etc/mysql/my.cnf или ~/.my.cnf) в директиве collation-server пропишите:

collation-server: utf8_unicode_ci

Для MySQL 8.x лучше указывать новое сопоставление utf8mb4_unicode_ci

Наука
7 млн интересуются