Я понимаю, что есть дюжина подобных вопросов, но ни одно из предложенных там решений не работает в этом случае.
У меня есть переменная PHP на странице, инициализированная как:
$hometeam="Крылья Советов"; //Cyrrilic string
Когда я распечатываю его на странице, он печатает правильно. Таким образом, echo $hometeam
отображает строку Крылья Советов, как и должно быть.
Метатег содержимого в заголовке устанавливается следующим образом:
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
И в самом начале страницы у меня есть следующее (как предложено в одном из решений, найденных в моем поиске):
ini_set('default_charset', 'utf-8');
Так что все должно быть хорошо.
Таблица MySQL, в которую я пытаюсь сохранить это, и рассматриваемый столбец имеют кодировку utf8_bin. Когда я захожу в phpMyAdmin и вручную ввожу Крылья Советов, он правильно сохраняется в поле.
Однако, когда я пытаюсь сохранить его с помощью запроса на странице, используя следующий базовый запрос:
mysql_query("insert into tablename (round,hometeam) values ('1','$hometeam') ");
Запись mysql выглядит так:
c390c5a1c391e282acc391e280b9c390c2bbc391c592c391c28f20c390c2a1c390c2bec390c2b2c390c2b5c391e2809ac390c2bec390c2b2
Так что же здесь происходит? Если на странице все в порядке, и с самим MySQL все в порядке, в чем проблема? Есть ли что-то, что я должен добавить к самому запросу, чтобы он сохранял строку в кодировке UTF-8?
Обратите внимание, что я установил mysql_set_charset('utf8');
после подключения к базе данных (вверху страницы).
РЕДАКТИРОВАТЬ: выполнение запроса SHOW VARIABLES LIKE "%character_set%"
дает следующее:
Variable_name Value
character_set_client utf8
character_set_connection utf8
character_set_database latin1
character_set_filesystem binary
character_set_results utf8
character_set_server latin1
character_set_system utf8
character_sets_dir /usr/share/mysql/charsets/
Похоже, здесь что-то может быть, так как в этом списке есть 2 латиницы. Что вы думаете?
Кроме того, когда я набираю кириллическую строку непосредственно в phpMyAdmin, сначала она выглядит нормально (она отображается правильно после сохранения). Но перезагружая таблицу, она отображается в HEX, как и вставленные. Прошу прощения за дезинформацию по этому поводу в вопросе. Как оказалось, это должно означать, что проблема связана с phpMyAdmin или самой базой данных.
РЕДАКТИРОВАТЬ № 2: это то, что возвращает show create table tablename
:
CREATE TABLE `tablename` ( `id` int(11) NOT NULL AUTO_INCREMENT, `round` int(11), `hometeam` varchar(32) COLLATE utf8_bin NOT NULL, `competition` varchar(32) CHARACTER SET latin1 NOT NULL DEFAULT 'Russia', PRIMARY KEY (`id`)) ENGINE=MyISAM AUTO_INCREMENT=119 DEFAULT CHARSET=utf8 COLLATE=utf8_bin
print_r
$_POST
у вас есть правильные значения там? - person jycr753   schedule 14.07.2013c390c5a1...
, где вы это видите? Это то, что вы получите, еслиSELECT HEX(hometeam) FROM tablename WHERE round = '1'
(а если нет, что делаете вы получите в ответ на этот запрос)? - person eggyal   schedule 15.07.2013