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

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

Я сделал:

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

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

_

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

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

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

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

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

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

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

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

3) SET NAMES очень важно. Немецкие символы могут появляться в latin1 и быть правильно размещены в таблице utf8 (перекодировано Mysql молча), когда вы правильно устанавливаете НАЗВАНИЯ. Сервер может отправлять данные на веб-страницу в желаемой кодировке, независимо от того, что такое кодировка таблицы. Он может быть перекодирован для вывода

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

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

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

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

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

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