mysql 强制utf8查询,mysql – 强制MariaDB客户端使用utf8mb4

我遇到了一个问题,当我使用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(根据以下答案中的建议).

解决方法:

您应该使用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或数字符号.

连接到服务器的任何和所有客户端将在处理任何其他命令之前执行这些命令.

标签:mysql,mariadb

来源: https://codeday.me/bug/20190823/1698378.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值