我遇到了一个问题,当我使用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
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(根据以下答案中的建议).
解决方法:
您应该使用utf8mb4_unicode_ci而不是utf8mb4_general_ci,因为它更准确.除非您在具有旧/有限cpu的系统上运行MariaDB,否则性能是一个巨大的问题.
话虽这么说,解决方案是在MariaDB配置中设置init_connect
(或在命令行上设置–init-connect):
init_connect = "SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci"
无论哪种方式都没关系.我不是推荐一种方式而不是另一种方式.两者都是同样有效的方法.
您的MariaDB配置可能位于my.cnf或my.cnf包含的文件中,通常位于/ etc / MysqL下.查看系统文档以获取详细信息.因为您正在配置服务器变量,如上面链接的MariaDB文档所示,您应该在配置文件的服务器部分中设置变量.配置文件的服务器部分由以“d”结尾的INI部分名称表示. INI部分由用方括号括起的关键字表示,例如, “[部分]”. “d”代表“守护进程”,它是服务器进程的标准UNIX术语.您可以在[MysqLd]部分或[mariadb]部分中设置变量.因为init_connect服务器变量对MysqL和MariaDB都是通用的,所以我建议你把它放在[MysqLd]下.
我看到你在粘贴的配置中设置了character_set_client = utf8mb4.你不需要这样做.您可以删除或注释掉该行.注释是以井号(#)开头的行,也称为井号,octothorp或数字符号.
连接到服务器的任何和所有客户端将在处理任何其他命令之前执行这些命令.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。