Проблема с буквой "ш"
При конвертации из cp151 в utf-8 буква ш конвертируется не корректно.
© 2009-03-20, Игорь Гузей (Guzei.com)
Описание:
Взял данные из cp1251-таблицы,
конвертнул данные iconv( 'cp1251', 'utf-8', 'ш' ) в utf-8,
записал в utf8-таблицу
взял данные из utf8-таблицы и распечала на страницу
через браузер utf-8 вижу, что вместо буквы "ш" бяка из двух символов.
также через оболочку к базе можно видеть всю кириллицу в абракадабре.
Решение:
1) сразу после подключения к БД выполнить:
mysql_query( 'SET NAMES utf8' );
или
mysql_query( 'SET NAMES utf8 COLLATE utf8_general_ci' );
2) не делать iconv
Причина:
в php.ini стоит:
init-connect="SET NAMES cp1251"
убрать там нельзя, т.к. это повлияет сразу на все базы и таблицы, где перехода на utf-8 ещё не было.
Иными словми причина в смеси старого в cp1251 и нового в utf-8 с некорректрой конвертацией через iconv.
SHOW VARIABLES LIKE 'char%'
vcharacter_set_client utf8
character_set_connection utf8
character_set_database cp1251
character_set_filesystem binary
character_set_results utf8
character_set_server cp1251
character_set_system utf8
В PhpMyAdmin:
Системные переменные MySQL
Серверные переменные и настройки
character set client utf8
(Глобальное значение) cp1251
character set connection utf8
(Глобальное значение) cp1251
character set database cp1251
character set filesystem binary
character set results utf8
(Глобальное значение) cp1251
character set server cp1251
character set system utf8
collation connection utf8_unicode_ci
(Глобальное значение) cp1251_general_ci
collation database cp1251_general_ci
collation server cp1251_general_ci
init connect SET NAMES cp1251
Тернии:
пытался ещё комбинировать параметры:
"set character_set_client=cp1251 / utf-8"
"set character_set_results=cp1251 / utf-8"
"set collation_connection=utf8_general_ci"
всё без толоку :)
К аналогичному решению пришли ещё 2.5 года назад здесь:
http://forum.maxsite.org/viewtopic.php?id=175