Как отобразить символы UTF-8 в phpMyAdmin? - PullRequest
57 голосов
/ 24 января 2011

У меня правильно установлена ​​база данных UTF-8, и я работаю с базой данных, содержащей японские символы.Если я делаю SELECT * ... из командной строки mysql, я правильно вижу японские символы.При извлечении данных из базы данных и отображении их на веб-странице я вижу их правильно.

Однако при просмотре данных таблицы в phpMyAdmin я просто вижу текст мусора.т.е..

1006 * Как заставить phpMyAdmin отображать символы на японском языке?

Кодировка символов на странице HTML установлена ​​в UTF-8.

Редактировать:

У меня естьпопытался экспортировать мою базу данных и открыл .sql файл в geany.Символы по-прежнему искажены, хотя кодировка установлена ​​в UTF-8.(Однако при выполнении mysqldump для базы данных также отображаются искаженные символы).

Набор символов установлен правильно для базы данных и всех таблиц ('latin' не найден где-либо в файле)

CREATE DATABASE `japanese` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

Я добавил строки в my.cnf и перезапустил mysql, но изменений нет.Я использую Zend Framework для вставки данных в базу данных.

Я собираюсь открыть награду за этот вопрос, поскольку я действительно хочу выяснить это.

Ответы [ 18 ]

35 голосов
/ 24 января 2011

К сожалению, 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 устарел во многих частях Азии. Существует стандартный способ решения вашей проблемы и сожранных данных:

  1. Сделайте резервную копию вашей базы данных как .sql
  2. Откройте его в текстовом редакторе с поддержкой UTF-8, убедитесь, что они выглядят правильно.
  3. Ищите charset collation latin1_general_ci, замените latin1 на utf8.
  4. Сохранить как новый файл sql, не перезаписывать резервную копию
  5. Импортируйте новый файл, теперь он будет корректно выглядеть в phpMyAdmin, и японский язык в вашем веб-приложении станет вопросительным знаком. Это нормально.
  6. Для вашего php-приложения, которое использует php-mod-mysql, вставьте mysql_query("SET NAMES UTF8"); после mysql_connect(), теперь вопросительные знаки исчезнут.
  7. Добавьте следующую конфигурацию 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 считаются устаревшими из-за проблем производительности и масштабируемости. Кроме того, вы не хотите связывать свой проект с базой данных определенного типа.
29 голосов
/ 02 апреля 2012

Если вы используете PDO, не забудьте запустить его с UTF8:

 $con = new PDO('mysql:host=' . $server . ';dbname=' . $db . ';charset=UTF8', $user, $pass,  array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));

(только что потратил 5 часов, чтобы понять это, надеюсь, это сэкономит кому-то драгоценное время ...)

14 голосов
/ 27 января 2011

Я немного погуглил и наткнулся на эту страницу

Команда, кажется, не имеет смысла, но я все равно попробовал:

В файле/usr/share/phpmyadmin/libraries/dbi/mysqli.dbi.lib.php в конце функции PMA_DBI_connect() как раз перед оператором return, который я добавил:

mysqli_query($link, "SET SESSION CHARACTER_SET_RESULTS =latin1;");
mysqli_query($link, "SET SESSION CHARACTER_SET_CLIENT =latin1;");

И это работает!Теперь я вижу японские символы в phpMyAdmin.WTF?Почему это работает?

7 голосов
/ 17 февраля 2011

У меня была такая же проблема,

Установите все сопоставления текста / varchar в phpMyAdmin в utf-8, а в файлах php добавьте:

mysql_set_charset ("utf8", $ your_connection_name);

Это решило это для меня.

5 голосов
/ 31 января 2011

Решение для этого может быть простым:

  1. найти функцию / метод подключения phpmysqladmin
  2. добавить это после подключения базы данных $db_conect->set_charset('utf8');
3 голосов
/ 15 декабря 2011

phpmyadmin не следует за соединением MySQL, потому что он определяет правильное сопоставление в файле конфигурации phpmyadmin.

Так что, если мы не хотим или не можем получить доступ к параметрам сервера, мы должны просто принудительно установить егодля отправки результатов в другом формате (кодировке), совместимом с клиентом, например, phpmyadmin

, например, если параметры сортировки соединения MySQL и кодировка MySQL - utf8, но phpmyadmin - ISO, мы должны просто добавить этот файл перед любым запросом selectотправлено в MYSQL через phpmyadmin:

SET SESSION CHARACTER_SET_RESULTS =latin1;
3 голосов
/ 17 мая 2013

Вот мой способ, как мне восстановить данные без ослабления с латыни 1 до utf8:

3 голосов
/ 19 апреля 2018

Измените latin1_swedish_ci на utf8_general_ci в phpmyadmin-> table_name-> field_name

Здесь вы найдете его на экране:

2 голосов
/ 20 ноября 2016

Имена функций и файлов не совпадают с именами в более новых версиях phpMyAdmin.Вот как исправить в новой версии PHPMyAdmins:

  1. Найти файл: phpmyadmin/libraries/DatabaseInterface.php

  2. В функции: public function query

  3. Сразу после открытия { добавить это:

    if($link != null){
        mysqli_query($link, "SET SESSION CHARACTER_SET_RESULTS =latin1;");
        mysqli_query($link, "SET SESSION CHARACTER_SET_CLIENT =latin1;");
    }
    

Вот и все.Работает как шарм.

2 голосов
/ 25 июня 2014

Очень просто добавить мультиязычность в myphpadmin, если у вас есть garbdata, отображаемый в myphpadmin, просто перейдите на myphpadmin, щелкните вашу базу данных, перейдите на вкладку операций на странице вкладки операций, смотрите раздел сравнения, установите его в utf8_general_ci, после чего все ваши garbdata будут отображаться правильно,простой и легкий трюк

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...