Как отображать символы UTF-8 в phpMyAdmin?

Я правильно настроил базу данных для UTF-8 и имею дело с базой данных, содержащей японские символы. Если я делаю SELECT * … из командной строки mysql, я правильно вижу японские символы. Когда вы извлекаете данные из базы данных и показываете их на веб-странице, я вижу это правильно.

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

ç§ã¯æ- ¥ 本æ- ™ ç † ãŒå ¥ ½ãã§ã ™ ã €, AE- ¥ 本æ- ™ ç † ã, …

Как я могу заставить 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 для вставки данных в базу данных.

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

17 Solutions collect form web for “Как отображать символы UTF-8 в phpMyAdmin?”

К сожалению, phpMyAdmin является одним из первых приложений php, которые правильно говорят с MySQL о кодировке. Ваша проблема, скорее всего, связана с тем, что firebase database не сохраняет правильные строки UTF-8 на первом месте.

Для корректного отображения символов в phpMyAdmin данные должны быть правильно сохранены в базе данных. Однако преобразование базы данных в правильную кодировку часто прерывает веб-приложения, которые не знают о компонентах, связанных с кодировкой, предоставляемых MySQL.

Могу ли я спросить: есть ли MySQL> версия 4.1? Для чего веб-приложение является базой данных? PHPBB? Была ли firebase database перенесена из более старой версии веб-приложения или более старой версии MySQL?

Мое предложение не для брата, если используемое вами веб-приложение слишком устарело и не поддерживается. Только конвертируйте базу данных в реальный UTF-8, если вы уверены, что веб-приложение может их правильно прочитать.


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

Ваш MySQL составляет> 4.1, это означает, что он кодируется. Каковы настройки сортировки набора символов для вашей базы данных? Я уверен, что вы используете latin1 , который является именем MySQL для ASCII, для хранения текста UTF-8 в байтах в базе данных.

Для клиентов, нечувствительных к кодировке (т. Е. Mysql-cli и php-mod-mysql), символы отображаются правильно, поскольку они передаются в / из базы данных в виде байтов. В phpMyAdmin байты считываются и отображаются как символы ASCII, это текст мусора, который вы видите.

Сколько часов было потрачено несколько лет назад (2005?), Когда MySQL 4.0 устарел, во многих частях Азии. Существует стандартный способ справиться с вашей проблемой и сжигать данные:

  1. Создайте .sql копию своей базы данных как .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 по # CLIENT SECTION [mysql] default-character-set=utf8 # SERVER SECTION [mysqld] default-character-set=utf8 

Для получения дополнительной информации о кодировке 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 считаются устаревшей причиной производительности и масштабируемости. Кроме того, вы не хотите привязывать свой проект к определенному типу базы данных.

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

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

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

Я сделал немного больше поисковых запросов и наткнулся на эту страницу

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

В файле /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? Почему это работает?

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

Задайте все сопоставления text / varchar в phpMyAdmin в utf-8 и в файлах php добавьте следующее:

mysql_set_charset (“utf8”, $ your_connection_name);

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

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

  1. найти функцию / метод соединения phpmysqladmin
  2. добавьте это после того, как firebase database подключена $db_conect->set_charset('utf8');

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

 /** * Fixes the data in the database that was inserted into latin1 table using utf8 encoding. * * DO NOT execute "SET NAMES UTF8" after mysql_connect. * Your encoding should be the same as when you firstly inserted the data. * In my case I inserted all my utf8 data into LATIN1 tables. * The data in tables was like ДЕТСКИÐ. * But my page presented the data correctly, without "SET NAMES UTF8" query. * But phpmyadmin did not present it correctly. * So this is hack how to convert your data to the correct UTF8 format. * Execute this code just ONCE! * Don't forget to make backup first! */ public function fixIncorrectUtf8DataInsertedByLatinEncoding() { // mysql_query("SET NAMES LATIN1") or die(mysql_error()); #uncomment this if you already set UTF8 names somewhere // get all tables in the database $tables = array(); $query = mysql_query("SHOW TABLES"); while ($t = mysql_fetch_row($query)) { $tables[] = $t[0]; } // you need to set explicit tables if not all tables in your database are latin1 charset // $tables = array('mytable1', 'mytable2', 'mytable3'); # uncomment this if you want to set explicit tables // duplicate tables, and copy all data from the original tables to the new tables with correct encoding // the hack is that data retrieved in correct format using latin1 names and inserted again utf8 foreach ($tables as $table) { $temptable = $table . '_temp'; mysql_query("CREATE TABLE $temptable LIKE $table") or die(mysql_error()); mysql_query("ALTER TABLE $temptable CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci") or die(mysql_error()); $query = mysql_query("SELECT * FROM `$table`") or die(mysql_error()); mysql_query("SET NAMES UTF8") or die(mysql_error()); while ($row = mysql_fetch_row($query)) { $values = implode("', '", $row); mysql_query("INSERT INTO `$temptable` VALUES('$values')") or die(mysql_error()); } mysql_query("SET NAMES LATIN1") or die(mysql_error()); } // drop old tables and rename temporary tables // this actually should work, but it not, then // comment out this lines if this would not work for you and try to rename tables manually with phpmyadmin foreach ($tables as $table) { $temptable = $table . '_temp'; mysql_query("DROP TABLE `$table`") or die(mysql_error()); mysql_query("ALTER TABLE `$temptable` RENAME `$table`") or die(mysql_error()); } // now you data should be correct // change the database character set mysql_query("ALTER DATABASE DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci") or die(mysql_error()); // now you can use "SET NAMES UTF8" in your project and mysql will use corrected data } 

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

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

Во-первых, от клиента

 mysql> SHOW VARIABLES LIKE 'character_set%'; 

Это даст вам что-то вроде

 +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | latin1 | | character_set_connection | latin1 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | latin1 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 

где вы можете проверить общие настройки для клиента, соединения, базы данных

Затем вы также должны проверить столбцы, из которых вы извлекаете данные с помощью

 SHOW CREATE TABLE TableName 

и проверяя кодировку и сопоставление полей CHAR (хотя обычно люди не устанавливают их явно, но можно указать CHAR[(length)] [CHARACTER SET charset_name] [COLLATE collation_name] в CREATE TABLE foo ADD COLUMN foo CHAR ... )

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

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

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

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

 SET SESSION CHARACTER_SET_RESULTS =latin1; 

1- Открыть файл:

 C:\wamp\bin\mysql\mysql5.5.24\my.ini 

2- Ищите запись [mysqld] и добавьте:

 character-set-server = utf8 skip-character-set-client-handshake 

Весь вид должен выглядеть так :

 [mysqld] port=3306 character-set-server = utf8 skip-character-set-client-handshake 

3- Перезапустите службу MySQL!

У меня была точно такая же проблема. Шифрование базы данных – utf-8, а сортировка – utf8_unicode_ci. Я смог увидеть текст Unicode в моем webapp, но результаты phpMyAdmin и sqldump были искажены.

Оказалось, что проблема в том, как мое веб-приложение подключалось к MySQL. Мне не хватало флаг кодирования.

После того, как я исправил это, я смог правильно видеть греческих символов как в phpMyAdmin, так и в sqldump, но потерял все мои предыдущие записи .

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

просто раскомментируйте эти строки в библиотеках / database_interface.lib.php

 if (! empty($GLOBALS['collation_connection'])) { // PMA_DBI_query("SET CHARACTER SET 'utf8';", $link, PMA_DBI_QUERY_STORE); //PMA_DBI_query("SET collation_connection = '" . //PMA_sqlAddslashes($GLOBALS['collation_connection']) . "';", $link, PMA_DBI_QUERY_STORE); } else { //PMA_DBI_query("SET NAMES 'utf8' COLLATE 'utf8_general_ci';", $link, PMA_DBI_QUERY_STORE); } 

если вы храните данные в utf8 без сохранения кодировки, вам не нужен phpmyadmin для повторного преобразования соединения. Это сработает.

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

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

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

  3. Сразу после открытия { add this:

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

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

Более простым решением для wamp является: перейдите в phpMyAdmin, щелкните localhost, выберите latin1_bin для настройки соединения с сервером, затем начните создавать базу данных и таблицу

Добавить:

 mysql_query("SET NAMES UTF8"); 

ниже:

 mysql_select_db(/*your_database_name*/); 

Меня устраивает,

 mysqli_query($con, "SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'"); 
  • Световая библиотека Unicode
  • Как импортировать (и правильно просматривать) Китайский файл CSV с кодировкой UTF-8 с Excel 2011 на Mac OS X
  • Можно ли принудительно Excel распознавать файлы CSV UTF-8 автоматически?
  • Как заставить UTF-8 работать в Java Webapps?
  • Почему современный Perl избегает UTF-8 по умолчанию?
  • Длины MySQL VARCHAR и UTF-8
  • Пакетное изменение кодировки файлов ascii с utf-8 на iso-8859-1
  • Как я могу использовать UTF-8 в Linux из Windows 7 через PuTTY?
  • Проблемы с символами UTF-8; я не вижу того, что я хранил
  • C # Преобразование строки из UTF-8 в ISO-8859-1 (Latin1) H
  • Каков правильный способ кодирования URL-символов Unicode?
  • Давайте будем гением компьютера.