Mysql: latin1-> utf8. Преобразование символов в их многобайтовые эквиваленты - PullRequest
0 голосов
/ 11 ноября 2009

Была таблица в latin1 и сайт в cp1252 Я хочу иметь таблицу в utf8 и сайт в utf-8

Я сделал:

1) на веб-странице: Content-Type: text/html;charset=utf-8

2) Mysql: ALTER TABLE XXX CONVERT TO CHARACTER SET utf8

_

Этот SQL не работает так, как я хочу - он не преобразует & * символов в базе данных в их многобайтовые эквиваленты

Пожалуйста, помогите. Танки

Ответы [ 3 ]

2 голосов
/ 11 ноября 2009

Как говорится в этом блоге , использование синтаксиса MySQL ALTER TABLE CONVERT - это Плохая идея [TM]. Экспортируйте свои данные, преобразуйте таблицу, а затем снова импортируйте данные, как описано в сообщении в блоге.

Другая идея: вы установили кодировку клиентского соединения по умолчанию через /etc/my.cnf или mysqli :: set-charset .

2 голосов
/ 23 ноября 2009

Я был дураком. SET NAMES отсутствует.

Что я знаю сейчас:

1) Каждый раз, когда изменяется кодировка столбца, фактические данные ВСЕГДА перекодируются! Измените поле на двоичное, чтобы увидеть это.

2) Кодировка столбца предшествует !, таблица и кодировка дБ следуют в приоритете. Они используются в основном для установки значений по умолчанию. (не уверен на 100% в последнем предложении)

3) SET NAMES очень важно. Немецкие символы могут входить в латиницу 1 и помещаться правильно в таблицу utf8 (перекодируется Mysql молча), когда вы правильно УСТАНАВЛИВАЕТЕ ИМЕНА. Сервер может отправлять данные на веб-страницу в нужной вам кодировке независимо от кодировки таблицы. Может быть перекодирован для вывода

4) Если есть столбец в кодировке A и столбец в кодировке B, и вы сравниваете их (или используете LIKE), Mysql автоматически преобразует их так, чтобы они выглядели как в одной кодировке

5) Mysql умный. Он никогда не работает с текстом как с байтами, если тип не является двоичным . Он всегда действует как персонажи! Он хочет, чтобы ё в latin1 равнялось бы ё в utf8, если он знает кодировку данных

0 голосов
/ 11 ноября 2009

Поскольку вы утверждаете, что теперь получаете s ** t обратно, это предполагает, что символы были изменены в базе данных.

Как вы получаете доступ к данным в MySQL? Если вы используете программный интерфейс, такой как PHP, вам может потребоваться указать этому интерфейсу, какую кодировку символов следует ожидать.

Например, в PHP вам нужно будет вызвать что-то вроде mysql_set_charset("utf8");, но это также можно сделать с помощью SQL-запроса SET NAMES utf8

Затем вам также необходимо убедиться, что все, что отображает текст, знает, что это utf8 и выполняет рендеринг с соответствующей кодировкой. Например, на веб-странице вам необходимо установить тип содержимого utf-8. что-то вроде Content-Type: text/html;charset=utf-8

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