gpt4 book ai didi

mysql - COLLATION 'utf8_general_ci' 对字符集 'latin1' 无效 - 即使设置了 utf8

转载 作者:行者123 更新时间:2023-11-29 01:38:26 25 4
gpt4 key购买 nike

在我们的数据库中,我们使用字符集 utf8 存储所有,并使用COLLATE utf8_general_ci

但是,从一个表中查询数据时,总是会出现如下异常:

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: COLLATION 'utf8_general_ci' is not valid for CHARACTER SET 'latin1'
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:377)
at com.mysql.jdbc.Util.getInstance(Util.java:360)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:978)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3887)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3823)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2435)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2582)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2530)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1907)
at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2030)
at org.jboss.jca.adapters.jdbc.CachedPreparedStatement.executeQuery(CachedPreparedStatement.java:111)
at org.jboss.jca.adapters.jdbc.WrappedPreparedStatement.executeQuery(WrappedPreparedStatement.java:462)
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:80)
... 120 more

我们交叉检查了我们能想到的一切:

SHOW VARIABLES LIKE '%char%';

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

还有

SHOW VARIABLES LIKE '%collation%';

collation_connection utf8_general_ci
collation_database utf8_general_ci
collation_server utf8_general_ci

还有

SELECT * FROM information_schema.`COLUMNS` WHERE TABLE_SCHEMA = "ourscheme" and Character_set_name <> "utf8";

(empty result)

我们确保客户端连接使用的是 utf-8。

我们没有想法。表格和列似乎设置正确。

我们还尝试在查询中显式使用 COLLATE:

...table.column COLLATE utf8_general_ci AS 'column'

如果我们将查询修改为:

...table.column COLLATE latin1_general_ci AS 'column'

它有效。怎么可能,mysql 到处都显示 utf8 - 但查询失败并且只适用于 latin1 排序规则?

有问题的表是在每次应用程序启动时生成的,并显式设置了默认字符集和默认整理。

使用完全相同的“代码”,我们生成了另外 8 个表 - 问题不存在。

有什么想法吗?环境是:

  • 野蝇 8.1
  • MySQL 5.6.26 x64
  • hibernate 4.3.5.Final

最佳答案

好的,找到原因了——我们试图在 QUERY 中COLLATE utf8_general_ci 的列之一实际上是一个 bigint(20)——只是始终关注字符串——列,因为 bigint(20) 没有设置字符集 ofc - 所以我不会预料到 that 异常消息。

关于mysql - COLLATION 'utf8_general_ci' 对字符集 'latin1' 无效 - 即使设置了 utf8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32844414/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com