【发布时间】:2014-02-12 06:26:09
【问题描述】:
所以我设置了 mysql 以获得完整的 utf8 支持:
我的.cnf:
[mysqld]
character_set_client=utf8
character-set-server=utf8
collation_server=utf8_general_ci
和
mysql> show variables like "char%";
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
mysql> show variables like "coll%";
+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8_general_ci |
+----------------------+-----------------+
3 rows in set (0.00 sec)
现在,我使用 mysql 查询在我的 Web 应用程序中正确存储和获取(和 json_encode)utf8 字符,但我遇到了 phpmyadmin 的问题。问题是 phpmyadmin 将这些国际字符显示为乱码。
Îλεος
sadaa
为了澄清一下,我说的是新数据,而不是已经存储的可能已损坏的数据。
phpmyadmin 的会话变量是:
show variables like "char%";
Variable_name Value
character_set_client utf8mb4
character_set_connection utf8mb4
character_set_database utf8
character_set_filesystem binary
character_set_results utf8mb4
character_set_server utf8
character_set_system utf8
character_sets_dir /usr/share/mysql/charsets/
show variables like "coll%"
Variable_name Value
collation_connection utf8mb4_general_ci
collation_database utf8_general_ci
collation_server utf8_general_ci
到目前为止,我发现国际 utf8 字符在 phpmyadmin 中正确显示而不是乱码的唯一方法是运行
SET NAMES utf8
每次在客户端应用程序 (php) 查询之前: a) 很奇怪,因为你可以看到一切都是正确的 utf8 b)我想避免每次都运行该查询
这是我的设置唯一的 phpmyadmin 问题还是一般数据编码问题?无论哪种方式,我该如何解决这个问题?最好只使用配置文件设置,不必每次都运行 SET NAMES utf8 查询。
提前致谢。
【问题讨论】:
-
您忽略了最重要的部分:您的 table 排序规则和您的实际 client 编码。其他一切都只是默认值。如果您一直在没有
SET NAMES utf8的情况下从 PHP 插入数据(尽管这不是推荐的方法),那么它现在可能已经损坏了。 -
@ÁlvaroG.Vicario 你是对的。我没有在我的应用程序中设置连接字符集。我相信我现在已经解决了。在下面发布了我自己的答案
标签: php mysql utf-8 phpmyadmin