如何在phpMyAdmin中显示UTF-8字符?

我有我的数据库正确设置为UTF-8和正在处理包含日语字符的数据库。 如果我从MySQL命令行执行SELECT * …,我会正确地看到日文字符。 从数据库中提取数据并将其显示在网页上时,我可以正确地看到它。

但是,在phpMyAdmin中查看表格数据时,我只能看到垃圾文本。 即。

ç§ã¯æ-¥æœ¬æ-™C†ãŒå¥½ãã§ã™ã€,æ-¥æœ¬æ-™C†A,…

我怎样才能让phpMyAdmin显示日文中的字符?

HTML页面上的字符编码设置为UTF-8。

编辑:

我已经尝试导出我的数据库,并在geany中打开.sql文件。 即使编码设置为UTF-8,字符仍然是乱码。 (但是,做一个mysqldump的数据库也显示乱码)。

数据库和所有表的字符集设置正确(在文件的任何位置都找不到“拉丁文”)

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

我已经添加了行my.cnf并重新启动mysql,但没有任何改变。 我正在使用Zend框架将数据插入到数据库中。

我打算为这个问题开一个奖金,因为我真的想知道这个问题。

不幸的是,phpMyAdmin是第一个与MySQL正确对待charset的php应用程序之一。 你的问题很可能是由于数据库没有存储正确的UTF-8string的事实。

为了在phpMyAdmin中正确显示字符,数据必须正确存储在数据库中。 但是,将数据库转换为正确的字符集通常会打断不了解由MySQL提供的与字符集相关的function的Web应用程序。

请问:是MySQL>版本4.1? 数据库是什么networking应用程序? 亚历克? 数据库是从旧版本的Web应用程序或旧版本的MySQL迁移而来的?

我的build议是不是兄弟,如果你使用的networking应用程序太旧,不支持。 只有将数据库转换为真正的UTF-8,如果你确定Web应用程序可以正确读取它们。


编辑:

你的MySQL> 4.1,这意味着它是字符集意识。 什么是你的数据库的字符集整理设置? 我非常肯定你正在使用latin1 (这是MySQL的MySQL名称)将UTF-8文本以“字节”存储到数据库中。

对于字符集不敏感的客户端(例如,mysql-cli和php-mod-mysql),字符会正确显示,因为它们正在以字节的forms传送到数据库。 在phpMyAdmin中,字节被读取并显示为ASCII字符,这就是您所看到的垃圾文本。

在亚洲很多地方,MySQL 4.0已经过时了,无数个小时已经花费了数年之久(2005年?)。 有一个标准的方式来处理你的问题和gobbled数据:

  1. 将数据库备份为.sql
  2. 在支持UTF-8的文本编辑器中打开它,确保它们看起来正确。
  3. 查找charset collation latin1_general_ci ,将latin1replace为utf8
  4. 另存为新的sql文件,请勿覆盖您的备份
  5. 导入新文件,现在他们将在phpMyAdmin中正确查看,日文在您的Web应用程序将成为问号。 这很正常。
  6. 对于依赖于php-mod-mysql的php web应用程序,插入mysql_query("SET NAMES UTF8");mysql_connect() ,现在问号将会消失。
  7. 为mysql-cli添加以下configurationmy.ini

     # CLIENT SECTION [mysql] default-character-set=utf8 # SERVER SECTION [mysqld] default-character-set=utf8 

有关MySQL上的charset的更多信息,请参考手册: http : //dev.mysql.com/doc/refman/5.0/en/charset-server.html

请注意,我假设你的web应用程序使用php-mod-mysql连接到数据库(因此mysql_connect()函数),因为php-mod-mysql是我能想到的唯一的扩展,仍然触发问题到这个日子。

phpMyAdmin使用php-mod-mysqli连接到MySQL。 我从来没有学会如何使用它,因为切换到框架*开发我的PHP项目。 我强烈鼓励你也这样做。

  • 许多框架,例如CodeIgniter,Zend,使用mysqli或者pdo来连接数据库。 mod-mysql函数被认为是过时导致性能和可伸缩性的问题。 另外,您不希望将项目与特定types的数据库绑定。

如果你使用的是PDO,不要忘记用UTF8来启动它:

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

(花了5个小时弄清楚了,希望能省下一些宝贵的时间…)

我做了一些更多的search,碰到了这个页面

该命令似乎没有道理,但我仍然尝试:

在函数PMA_DBI_connect()的最后面的文件/usr/share/phpmyadmin/libraries/dbi/mysqli.dbi.lib.php中,在我添加的return语句之前:

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

它的工作原理! 我现在在phpMyAdmin中看到日文字符。 WTF? 为什么这个工作?

我有同样的问题,

将phpMyAdmin中的所有文本/ varchar归类设置为utf-8,并在php文件中添加:

mysql_set_charset(“utf8”,$ your_connection_name);

这为我解决了。

这个解决scheme可以像下面这样简单:

  1. findphpmysqladmin连接函数/方法
  2. 数据库连接后添加这个$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 } 

首先,从客户那里做

 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字段的字符集和sorting规则(虽然通常人们不会显式地设置它们,但可以在CREATE TABLE foo ADD COLUMN foo CHAR ...给出CHAR[(length)] [CHARACTER SET charset_name] [COLLATE collation_name] CREATE TABLE foo ADD COLUMN foo CHAR ...

我相信我已经列出了所有相关的设置在MySQL的一面。 如果仍然迷失,请阅读精美的文档 ,也许这个问题可能会引起一些注意(特别是我是如何通过首先查看mysql客户端来实现的)。

phpmyadmin不遵循MySQL连接,因为它在phpmyadminconfiguration文件中定义了适当的sorting规则。

所以,如果我们不想要或者如果我们不能访问服务器参数,我们应该强制它发送与客户端兼容的不同格式(编码)的结果,即phpmyadmin

例如,如果MySQL连接归类和MySQL charset都是utf8,但phpmyadmin是ISO,那么在通过phpmyadmin发送给MYSQL的任何select查询之前,我们应该只添加一个:

 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,sorting规则是utf8_unicode_ci。 我能看到我的web应用程序中的Unicode文本,但phpMyAdmin和sqldump结果是乱码。

事实certificate,问题是我的 Web应用程序连接到MySQL的方式。 我错过了编码标志。

在我修好之后,我在phpMyAdmin和sqldump中都能正确看到希腊字符,但是之前input的内容都丢失了

只需在libraries / 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. 开幕后{添加此:

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

而已。 奇迹般有效。

对于wamp更简单的解决scheme是:转到phpMyAdmin,单击localhost,selectlatin1_bin进行服务器连接归类,然后开始创build数据库和表

它真的很简单,添加myphpadmin多语言,如果你在myphpadmin显示garbdata,只要去myphpadmin点击你的数据库去操作选项卡在操作选项卡页面上看到整理部分设置为utf8_general_ci,之后,所有的garbdata将正确显示。 一个简单而简单的伎俩

加:

 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'”);