首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在phpMyAdmin中显示UTF-8字符?

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

Stack Overflow用户
提问于 2011-01-24 09:50:47
回答 18查看 158.4K关注 0票数 59

我将我的数据库正确地设置为UTF-8,并且正在处理一个包含日语字符的数据库。如果我选择了*...在mysql命令行中,我正确地看到了日语字符。当从数据库中提取数据并将其显示在网页上时,我可以正确地看到它。

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

œç-™ç†ãŒ¨yon1、™ã、œç-™ç†ã,...

如何让phpMyAdmin用日语显示字符?

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

编辑:

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

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

代码语言:javascript
复制
CREATE DATABASE `japanese` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

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

我将为这个问题开一个赏金,因为我真的想弄清楚这个问题。

EN

回答 18

Stack Overflow用户

回答已采纳

发布于 2011-01-27 13:26:53

我又用谷歌搜索了一下,偶然发现了this页面

这个命令似乎没什么意义,但我还是试过了:

在function PMA_DBI_connect()末尾的文件/usr/share/phpmyadmin/libraries/dbi/mysqli.dbi.lib.php中,我在return语句之前添加了以下内容:

代码语言:javascript
复制
mysqli_query($link, "SET SESSION CHARACTER_SET_RESULTS =latin1;");
mysqli_query($link, "SET SESSION CHARACTER_SET_CLIENT =latin1;");

而且它起作用了!我现在在phpMyAdmin中看到了日语字符。见鬼?为什么这是可行的?

票数 16
EN

Stack Overflow用户

发布于 2011-01-24 14:48:39

不幸的是,phpMyAdmin是第一个与MySQL正确对话字符集的php应用程序之一。您的问题很可能是由于数据库最初没有存储正确的UTF-8字符串。

为了在phpMyAdmin中正确地显示字符,必须将数据正确地存储在数据库中。然而,将数据库转换为正确的字符集通常会破坏web应用程序,这些应用程序不知道MySQL提供的与字符集相关的功能。

我可以问一下: MySQL > 4.1版吗?数据库是用来做什么的?phpBB?数据库是从较旧版本的web应用程序还是从较旧版本的MySQL迁移来的?

我的建议是,如果您使用的web应用程序太旧且不受支持,请不要使用brother。如果您确定web应用程序可以正确读取数据库,则仅将数据库转换为真正的UTF-8。

编辑:

您的MySQL > 4.1,这意味着它是字符集感知的。数据库的字符集排序规则设置是什么?我非常确定您正在使用latin1,这是MySQL对ASCII码的名称,将UTF8文本以‘字节’的形式存储到数据库中。

对于字符集不敏感的客户端(即mysql-cli和php-mod-mysql),字符可以正确显示,因为它们是以字节的形式传入/传出数据库的。在phpMyAdmin中,字节被读取并显示为ASCII码字符,这就是您看到的垃圾文本。

数年前已经花费了无数的时间(2005?)当MySQL 4.0在亚洲的许多地方过时的时候。有一个标准的方法来处理你的问题和吞噬的数据:

在支持UTF-8的文本编辑器中,将数据库备份为.sql

  • Open it up,确保它们看起来正确。

  • 查找charset collation latin1_general_ci,将latin1替换为新的sql文件,不要覆盖您的backup

  • Import新文件,它们现在将在phpMyAdmin中正确显示,并且日语在您的web应用程序上将成为问号。这是正常的。对于依赖于php-mod-mysql的php web应用程序,

  • ,在mysql_query("SET NAMES UTF8");之后插入mysql_connect(),现在问号将消失。

  • 为mysql -cli添加以下配置字符集:客户端部分mysql默认字符集=utf8#服务器部分mysqld default-character-set=utf8

有关MySQL上字符集的更多信息,请参阅手册: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函数被认为是过时的,会导致性能和可伸缩性问题。此外,您也不希望将项目绑定到特定类型的数据库。
票数 37
EN

Stack Overflow用户

发布于 2012-04-03 02:59:58

如果你正在使用PDO,别忘了用UTF8启动它:

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

(我花了5个小时解决这个问题,希望这能节省一些宝贵的时间……)

票数 30
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4777900

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档