我的数据库已正确设置为 UTF-8,并且正在处理包含日文字符的数据库。如果我从 mysql 命令行执行 SELECT *...,我可以正确看到日文字符。从数据库中提取数据并将其显示在网页上时,我可以正常看到它。
但是,在 phpMyAdmin 中查看表格数据时,我只看到垃圾文本。即。
ç§ã¯æ—¥æœ¬æ–™ç†ãŒå¥½ãã§ã™ã€‚日本料ç†ã‚...
如何让 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 将数据插入数据库。
我打算为这个问题开一个赏金,因为我真的很想弄清楚这一点。
最佳答案
不幸的是,phpMyAdmin 是第一个与 MySQL 正确讨论字符集的 php 应用程序之一。您的问题很可能是因为数据库一开始没有存储正确的 UTF-8 字符串。
为了在 phpMyAdmin 中正确显示字符,数据必须正确存储在数据库中。但是,将数据库转换为正确的字符集通常会破坏不了解 MySQL 提供的字符集相关功能的 Web 应用程序。
请问:MySQL > 4.1 版吗?数据库用于什么 Web 应用程序? phpBB?数据库是从旧版本的 Web 应用程序还是旧版本的 MySQL 迁移而来的?
如果您使用的网络应用程序太旧且不受支持,我的建议是不要兄弟。仅当您确定 Web 应用程序可以正确读取数据库时,才将数据库转换为真正的 UTF-8。
编辑:
您的 MySQL > 4.1,这意味着它可以识别字符集。您的数据库的字符集排序规则设置是什么?我很确定您正在使用 latin1
,这是 ASCII 的 MySQL 名称,将 UTF-8 文本以“字节”形式存储到数据库中。
对于字符集不敏感的客户端(即 mysql-cli 和 php-mod-mysql),字符可以正确显示,因为它们以字节形式传入/传出数据库。在 phpMyAdmin 中,字节被读取并显示为 ASCII 字符,这就是你看起来的垃圾文本。
在多年前(2005 年?)MySQL 4.0 在亚洲许多地区过时时,已经花费了无数个小时。有一种标准方法可以处理您的问题和吞噬数据:
.sql
charset collation latin1_general_ci
,将 latin1
替换为 utf8
。mysql_connect()
之后插入 mysql_query("SET NAMES UTF8");
,现在是问号会消失的。为mysql-cli添加如下配置my.ini
:
# 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
请注意,我假设您的 Web 应用程序正在使用 php-mod-mysql 连接到数据库(因此使用 mysql_connect()
函数),因为 php-mod-mysql 是我唯一可以使用的扩展想到今天仍然会触发问题。
phpMyAdmin 使用 php-mod-mysqli 连接到 MySQL。我从未学习过如何使用它,因为切换到框架* 来开发我的 php 项目。我强烈建议你也这样做。
https://stackoverflow.com/questions/4777900/