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

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

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

Проверить наличие знаков “�?” в тексте можно с помощью запроса:

1
2
3
4
SELECT
    convert(name USING BINARY)
FROM
    `MyTable`;

Как исправить?

  • создаем таблицу аналогичную по структуре той, которая хранится в неправильной кодировке.
  • получаем структуру исходной таблицы:
1
SHOW CREATE TABLE `MyTable`;
  • задаем другое имя, напр. `New_MyTable`; прописываем UTF-8 кодировку;
  • в стобцах исходной таблицы содержащих кириллицу делаем замену:
1
2
3
4
5
6
7
8
9
10
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` данные, перекодируя на ходу нужные столбцы:
1
2
3
4
5
6
7
8
INSERT INTO
    `New_MyTable`(id, my_column, third_column)
    SELECT
        id,
        convert(my_column using binary),
        third_column
    FROM
        `MyTable`;
  • Таблица `New_MyTable` готова к использованию.

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

Leave a Reply

Your email address will not be published. Required fields are marked *


9 + = двенадцать