Задавайте вопросы, мы ответим
Вы не зашли.
Здравствуйте, форумчане!
Перерыл весь инет, честно, не смог найти решения моей проблемы.
Есть работающий сайт в кодировке utf8. На стадии разработки была допущена оплошность: "SET NAMES utf-8". Именно с дефисом - utf-8. На сайте нормально отображаются русские, китайские, арабские, казахские буквы (да и любые другие), что однозначно говорит о том, что данные в базе хранятся в utf8. Но при этом в PHPMyAdmin кракозябры вместо букв такого вида Монреаль
База данных, все таблицы и все текстовые поля в таблицах имеют collation "utf8_general_ci". Заглянул в my.conf: там в [mysqld] ничего не сказано про кодировки по умолчанию. Пробовал менять "SET NAMES utf-8" на "SET NAMES utf8": все новые данные теперь отображаются и на сайте и в PHPMyAdmin правильно, но старые отображаются кракозябрами и там, и там.
SHOW VARIABLES
character_set_client utf8
character_set_connection utf8
character_set_database utf8
character_set_filesystem binary
character_set_results utf8
character_set_server latin1
character_set_system utf8
character_sets_dir \usr\local\mysql-5.1\share\charsets\
collation_connection utf8_general_ci
collation_database utf8_general_ci
collation_server latin1_swedish_ci
Как мне теперь переформатировать базу данных, чтобы в PHPMyAdmin все правильно отображалось?
Отредактированно Blumfontein (02.05.2012 11:09:42)
Неактивен
А можете сделать отдельную страничку, которая подцепится к той же базе,
и вывести SHOW VARIABLES LIKE 'char%' не из phpmyadmin, а непосредст-
венно из этого соединения?
SET NAMES utf-8 — это ошибочный запрос, он не меняет кодировку, т.е.
интересно посмотреть, в какой кодировке сами данные.
Неактивен
paulus написал:
А можете сделать отдельную страничку, которая подцепится к той же базе,
и вывести SHOW VARIABLES LIKE 'char%' не из phpmyadmin, а непосредст-
венно из этого соединения?
SET NAMES utf-8 — это ошибочный запрос, он не меняет кодировку, т.е.
интересно посмотреть, в какой кодировке сами данные.
выводит следующее
character_set_client latin1
character_set_connection latin1
character_set_database utf8
character_set_filesystem binary
character_set_results latin1
character_set_server latin1
character_set_system utf8
character_sets_dir /usr/share/mysql/charsets/
код
mysql_connect($hostname, $username, $password) or die('Error while connecting to database');
mysql_query('SET NAMES UTF-8');
mysql_select_db($dbName) or die('Error: no such database');
$q = mysql_query("SHOW VARIABLES LIKE 'char%'");
while($o = mysql_fetch_assoc($q))
{
foreach($o as $value)
echo $value.' ';
echo '<br>';
}
Отредактированно Blumfontein (06.05.2012 12:02:47)
Неактивен
Отредактировал. В первый раз напутал в коде, и там выводило другое.
Неактивен
Ахаа, замечательно, т.е. данные лежат в latin1.
Ну тогда я ожидаю, что Вам поможет какая-то такая последовательность действий.
1. mysqldump --default-character-set=latin1 -A >dump.sql
2. sed -i 's/latin1/utf8/' dump.sql
3. mysql <dump.sql
P.S. не забудьте сделать предварительно резервную копию.
P.P.S. Подробнее — в статье: http://sqlinfo.ru/articles/info/5.html
Неактивен