我将我的数据库正确地设置为UTF-8,并且正在处理一个包含日语字符的数据库。如果我选择了*...在mysql命令行中,我正确地看到了日语字符。当从数据库中提取数据并将其显示在网页上时,我可以正确地看到它。
但是,在phpMyAdmin中查看表数据时,我只看到垃圾文本。即。
œç-™ç†ãŒ¨yon1、™ã、œç-™ç†ã,...
如何让phpMyAdmin用日语显示字符?
HTML页面上的字符编码设置为UTF-8。
编辑:
我已经尝试导出我的数据库,并在geany中打开了.sql文件。即使编码设置为UTF-8,字符仍然是乱码。(但是,对数据库执行mysqldump也会显示乱码)。
为数据库和所有表正确设置了字符集(在文件中的任何位置都找不到‘latin’)
CREATE DATABASE `japanese` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;我已经向my.cnf添加了行,并重新启动了mysql,但没有任何更改。我使用Zend Framework将数据插入到数据库中。
我将为这个问题开一个赏金,因为我真的想弄清楚这个问题。
发布于 2011-01-27 13:26:53
我又用谷歌搜索了一下,偶然发现了this页面
这个命令似乎没什么意义,但我还是试过了:
在function 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中看到了日语字符。见鬼?为什么这是可行的?
发布于 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
charset collation latin1_general_ci,将latin1替换为新的sql文件,不要覆盖您的backup
mysql_query("SET NAMES UTF8");之后插入mysql_connect(),现在问号将消失。
有关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项目。我强烈建议你也这样做。
发布于 2012-04-03 02:59:58
如果你正在使用PDO,别忘了用UTF8启动它:
$con = new PDO('mysql:host=' . $server . ';dbname=' . $db . ';charset=UTF8', $user, $pass, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));(我花了5个小时解决这个问题,希望这能节省一些宝贵的时间……)
https://stackoverflow.com/questions/4777900
复制相似问题