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

Mat*_*ick 57 mysql unicode phpmyadmin utf-8

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

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

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

如何让phpMyAdmin显示日文字符?

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

编辑:

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

为数据库和所有表正确设置了字符集(在文件中的任何位置都找不到'latin')

CREATE DATABASE `japanese` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
Run Code Online (Sandbox Code Playgroud)

我已将这些行添加到my.cnf并重新启动了mysql,但没有任何变化.我正在使用Zend Framework将数据插入数据库.

我打算为这个问题开一个赏金,因为我真的想弄清楚这一点.

tim*_*eam 35

不幸的是,phpMyAdmin是第一个正确地与MySQL谈论关于charset的php应用程序之一.您的问题很可能是因为数据库首先没有存储正确的UTF-8字符串.

为了在phpMyAdmin中正确显示字符,数据必须正确存储在数据库中.但是,将数据库转换为正确的字符集通常会破坏不了解MySQL提供的字符集相关功能的Web应用程序.

请问:MySQL是4.1版本吗?该数据库适用于哪种Web应用程序?亚历克?数据库是从旧版本的Web应用程序迁移还是从旧版本的MySQL迁移?

如果您使用的网络应用程序太旧而且不受支持,我的建议不是兄弟.如果您确定Web应用程序可以正确读取它们,则只将数据库转换为真正的UTF-8.


编辑:

你的MySQL> 4.1,这意味着它是charset-aware.您的数据库的字符集整理设置是什么?我很确定你使用的latin1是ASCII的MySQL名称,用于将'字节'中的UTF-8文本存储到数据库中.

对于不受charset不敏感的客户端(即mysql-cli和php-mod-mysql),字符会正确显示,因为它们作为字节传输到数据库或从数据库传输.在phpMyAdmin中,字节被读取并显示为ASCII字符,这就是您看起来的垃圾文本.

数百万年前(2005年?),当MySQL 4.0在亚洲许多地区过时时,已经花费了无数个小时.有一种标准的方法来处理您的问题和吞噬数据:

  1. 备份数据库为 .sql
  2. 在支持UTF-8的文本编辑器中打开它,确保它们看起来正确.
  3. 寻找charset collation latin1_general_ci,替换latin1utf8.
  4. 保存为新的sql文件,请勿覆盖您的备份
  5. 导入新文件,它们现在将在phpMyAdmin中正确显示,并且您的Web应用程序上的日语将成为问号.这很正常.
  6. 对于依赖php-mod-mysql的php web应用程序,插入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
    
    Run Code Online (Sandbox Code Playgroud)

有关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函数被认为是过时的导致性能和可伸缩性问题.此外,您不希望将项目绑定到特定类型的数据库.

  • 请不要说*不幸*.非常幸运,PHPMyAdmin做到了:) +1 (4认同)
  • +1命令行,特别是在Windows上,根本不是编码的可靠指标; phpMyAdmin实际上通常是正确的. (3认同)

Naa*_*iee 29

如果您正在使用PDO,请不要忘记使用UTF8启动它:

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

(只花了5个小时来弄清楚这一点,希望它能节省宝贵的时间......)


Mat*_*ick 14

我做了一些谷歌搜索,并遇到了这个页面

该命令似乎没有意义,但无论如何我都试过了:

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

mysqli_query($link, "SET SESSION CHARACTER_SET_RESULTS =latin1;");
mysqli_query($link, "SET SESSION CHARACTER_SET_CLIENT =latin1;");
Run Code Online (Sandbox Code Playgroud)

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


小智 7

我有同样的问题,

将phpMyAdmin中的所有text/varchar排序设置为utf-8,并在php文件中添加以下内容:

mysql_set_charset("utf8",$ your_connection_name);

这解决了我.

  • ...分别为`$ mysqli-> set_charset("utf8");`用于MySQLi.;) (6认同)

ajr*_*eal 5

解决方案可以像以下一样简单:

  1. 找到phpmysqladmin连接函数/方法
  2. 在连接数据库后添加此项 $db_conect->set_charset('utf8');