首页 > 解决方案 > Java MySql 连接器版本之间的默认 CHARACTER_SET 和 COLLATION_CONNECTION 更改了吗?

问题描述

我们使用的是 MySql 5.7 版,我们所有的表\数据库都使用 utf8_unicode_ci。在尝试将我们的 Java 连接器从 5.1.38 升级到最新 (8.0.17) 时,我们遇到了以下异常:

java.sql.SQLException: Illegal mix of collations (utf8_bin,IMPLICIT) and (utf8mb4_general_ci,COERCIBLE) for operation '='

比较两个连接器之间的会话变量,我们注意到了两者CHARACHTER_SET,并且COLLATION_CONNECTION在版本之间发生了utf8_bin变化utf8mb4_general_ci

我知道我们可以添加到连接字符串connectionCollation=utf8_bin,但这不是超级安全,有没有办法强制 MySql 服务器根据数据库的默认排序规则\字符集设置默认排序规则?

标签: javamysql

解决方案


您应该阅读https://dev.mysql.com/doc/refman/8.0/en/charset-connection.html,它解释了有关客户端和服务器字符集的所有内容。

据我所知,客户端或连接字符集无法隐式使用数据库字符集。最接近的情况如下,它仍然需要客户端运行一个语句:

SET CHARACTER SET utf8mb4;

这隐式地将character_set_connectionand设置collation_connection为当前默认数据库的。

我不知道你为什么说将排序规则添加到连接字符串是不安全的。这不就是为了这个吗?


推荐阅读