Была таблица в 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