К сожалению, phpMyAdmin - одно из первых php-приложений, которое правильно говорит с MySQL о charset. Ваша проблема, скорее всего, связана с тем, что база данных не хранит правильные строки UTF-8 на первом месте.
Чтобы правильно отображать символы в phpMyAdmin, данные должны быть правильно сохранены в базе данных. Однако преобразование базы данных в правильную кодировку часто нарушает работу веб-приложений, которые не поддерживают функцию, связанную с кодировкой, предоставляемую MySQL.
Могу я спросить: MySQL> версии 4.1? Для какого веб-приложения используется база данных? PHPBB? Была ли база данных перенесена из более старой версии веб-приложения или из более старой версии MySQL?
Мое предложение не братьям, если используемое веб-приложение слишком старое и не поддерживается. Преобразуйте базу данных в реальный UTF-8 только в том случае, если вы уверены, что веб-приложение может правильно их прочитать.
Редактировать:
Ваш MySQL> 4.1, это означает, что он поддерживает кодировку. Каковы параметры сортировки charset для вашей базы данных? Я уверен, что вы используете latin1
, то есть имя MySQL для ASCII, для хранения текста UTF-8 в байтах в базе данных.
Для клиентов, не зависящих от набора символов (например, mysql-cli и php-mod-mysql), символы отображаются правильно, поскольку они передаются в / из базы данных в виде байтов. В phpMyAdmin байты считываются и отображаются в виде символов ASCII, это выглядит как мусорный текст.
Бесчисленные часы были потрачены годы назад (2005?), Когда MySQL 4.0 устарел во многих частях Азии. Существует стандартный способ решения вашей проблемы и сожранных данных:
- Сделайте резервную копию вашей базы данных как
.sql
- Откройте его в текстовом редакторе с поддержкой UTF-8, убедитесь, что они выглядят правильно.
- Ищите
charset collation latin1_general_ci
, замените latin1
на utf8
.
- Сохранить как новый файл sql, не перезаписывать резервную копию
- Импортируйте новый файл, теперь он будет корректно выглядеть в phpMyAdmin, и японский язык в вашем веб-приложении станет вопросительным знаком. Это нормально.
- Для вашего php-приложения, которое использует php-mod-mysql, вставьте
mysql_query("SET NAMES UTF8");
после mysql_connect()
, теперь вопросительные знаки исчезнут.
Добавьте следующую конфигурацию my.ini
для mysql-cli:
# CLIENT SECTION
[mysql]
default-character-set=utf8
# SERVER SECTION
[mysqld]
default-character-set=utf8
Для получения дополнительной информации о charset на MySQL, пожалуйста, обратитесь к руководству:
http://dev.mysql.com/doc/refman/5.0/en/charset-server.html
Обратите внимание, что я предполагаю, что ваше веб-приложение использует php-mod-mysql для подключения к базе данных (отсюда и функция mysql_connect()
), так как php-mod-mysql - единственное расширение, которое, я думаю, по-прежнему вызывает проблему И ПО СЕЙ ДЕНЬ.
phpMyAdmin использует php-mod-mysqli для подключения к MySQL. Я так и не научился его использовать, потому что переключаюсь на фреймворки * для разработки своих php-проектов. Я настоятельно рекомендую вам сделать это тоже.
- Множество фреймворков, например CodeIgniter, Zend, используйте mysqli или pdo для подключения к базам данных. Функции mod-mysql считаются устаревшими из-за проблем производительности и масштабируемости. Кроме того, вы не хотите связывать свой проект с базой данных определенного типа.