【发布时间】:2018-05-13 23:38:51
【问题描述】:
我遇到了一个问题,即在使用 PHP 与命令行进行查询时,我得到了不同的排序结果。根据我的研究,在某些情况下,错误的编码可能会导致结果顺序出现问题。
也就是说,我所有的数据库表都编码为utf8mb4,排序规则为utf8mb4_general_ci。但是,似乎mysql变量设置不正确。
我在 Mysql 5.5.5-10.1.26-MariaDb 上。
这是我的 CNF 设置,但老实说我不知道我在这里做什么:
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mariadb]
[mysqld]
character-set-server=utf8mb4
character_set_client=utf8mb4
collation-server=utf8mb4_general_ci
mysql 输出的变量:
character_set_client utf8
character_set_connection utf8
character_set_database utf8mb4
character_set_filesystem binary
character_set_results utf8
character_set_server utf8mb4
character_set_system utf8
collation_connection utf8_general_ci
collation_database utf8mb4_unicode_ci
collation_server utf8mb4_general_ci
更新:有人询问我如何连接到数据库:
$this->connection = new PDO('mysql:host='.DB_SERVER.';dbname='.DB_NAME.';port='.DB_PORT, DB_USER, DB_PASS, $options);
更新:我已切换到utf8mb4_unicode_ci(根据以下答案中的建议)。
【问题讨论】:
-
请告诉我们您如何从 pup 连接到 mariadb 以及您使用的 API。
-
我不只是使用 PHP,我还使用其他语言。所以我宁愿不要在 PHP 本身中设置它。没有人应该控制改变这个......这表示我已经用该信息更新了问题。
-
他们确实可以控制设置字符集,因为不同的客户端可能使用不同的字符集和排序规则。
-
如果我需要为每个都设置它,这不是一个大问题。我只是想确保我在正确的轨道上考虑到编码混乱会导致问题一直出现。