У меня есть данные в кодировке latin1, хранящиеся в базе данных mysql UTF-8, как мне это исправить? - PullRequest
3 голосов
/ 23 июня 2009

У меня есть данные, закодированные в латинице 1, в базе данных mysql UTF-8, как мне это исправить? К сожалению, исходных данных нет.

Я понял, что единственный способ правильно отобразить данные - установить все символы latin1 в PHP, HTML и MySQL.

Как только это будет завершено, я могу изменить все обратно на utf-8 в моем HTML и PHP.

Версии: mysql Ver 14.12 Distrib 5.0.51a, для debian-linux-gnu (x86_64) с использованием readline 5.2

EDIT: Я должен отметить, что все работает хорошо, так как я говорю PHP и HTML использовать кодировку latin1, однако мне это просто кажется плохим.

Ответы [ 2 ]

4 голосов
/ 23 июня 2009

Я считаю, что эта статья делает именно то, что вам нужно .

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

USE information_schema;
SELECT CONCAT('ALTER TABLE ', table_name, ' MODIFY ', column_name, ' ', REPLACE(column_type, 'char', 'binary'), ';') FROM columns WHERE table_schema = 'MyDb' and data_type LIKE '%char%';
SELECT CONCAT('ALTER TABLE ', table_name, ' MODIFY ', column_name, ' ', REPLACE(column_type, 'text', 'blob'), ';') FROM columns WHERE table_schema = 'MyDb' and data_type LIKE '%text%';
SELECT CONCAT('ALTER TABLE ', table_name, ' MODIFY ', column_name, ' ', column_type, ' CHARACTER SET utf8;') FROM columns WHERE table_schema = 'MyDb' and data_type LIKE '%char%';
SELECT CONCAT('ALTER TABLE ', table_name, ' MODIFY ', column_name, ' ', column_type, ' CHARACTER SET utf8;') FROM columns WHERE table_schema = 'MyDb' and data_type LIKE '%text%';

Скопируйте вывод всех вышеприведенных операторов SELECT в сценарий SQL. Добавьте к этому следующее:

ALTER DATABASE MyDb CHARACTER SET utf8;

Переключитесь на MyDb (USE MyDb;) и запустите сценарий SQL.

0 голосов
/ 23 июня 2009

Вы можете попробовать выполнить следующий запрос:

ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

ПРИМЕЧАНИЕ: я не пробовал это, но это взято из документов MY-SQL (http://dev.mysql.com/doc/refman/5.0/en/charset-column.html).
На странице, указанной выше, есть дополнительная информация, но, похоже, это именно тот запрос, который вам нужен (он размещен прямо внизу на случай, если вам интересно). Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...