четверг, 14 октября 2010 г.

Mysql: проблема букв "И" и "ш"

После неудачной конвертации из одной кодировки в другую, может случится ситуация, при которой вместо заглавной буквы "И" и строчной "ш" отображаются знаки "�?", при этом остальные символы отображаются правильно. Например "Андру�?ко �?рина".

По-умолчанию phpmyadmin коннектится к БД, используя UTF-8. В полях с кириллицей можно увидеть кракозябры, похожие на "РђРЅРґСЂСѓС?РєРѕ Р?СЂРёРЅР°".

Проверить наличие знаков "�?" в тексте можно с помощью запроса:
SELECT convert(name USING BINARY) FROM `MyTable`;
Как исправить?
  • создаем таблицу аналогичную по структуре той, которая хранится в неправильной кодировке.
  • получаем структуру исходной таблицы:
SHOW CREATE TABLE `MyTable`;
  • задаем другое имя, напр. `New_MyTable`; прописываем UTF-8 кодировку;
  • в стобцах исходной таблицы содержащих кириллицу делаем замену:
UPDATE `New_MyTable`
SET
`my_column` = REPLACE (`my_column`,
CONCAT
(CHAR(209), CHAR(63)), CONCAT(CHAR(209), CHAR(136)) );

UPDATE
`New_MyTable`
SET
`my_column` = REPLACE (`my_column`,
CONCAT
(CHAR(208), CHAR(63)), CONCAT(CHAR(208), CHAR(152)) );
  • вставляем в таблицу `New_MyTable` данные, перекодируя на ходу нужные столбцы:
INSERT INTO `New_MyTable`(id, my_column, third_column )
SELECT
id, convert(my_column using binary), third_column
FROM
`MyTable`;
  •  Таблица `New_MyTable` готова к использованию.

Источник: Античат.ру

Ярлыки: , , , ,