首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >"latin1_german1_ci“校勘从何而来?

"latin1_german1_ci“校勘从何而来?
EN

Stack Overflow用户
提问于 2016-05-25 23:51:34
回答 1查看 474关注 0票数 0

当Java/Spring/Hibernate应用程序试图对mysql数据库执行准备好的语句时,我收到以下错误消息:

代码语言:javascript
复制
Caused by: java.sql.SQLException: Illegal mix of collations (latin1_swedish_ci,COERCIBLE) and (latin1_german1_ci,COERCIBLE) for operation '='

生成此结果的select语句(如tomcat日志中所示)是:

代码语言:javascript
复制
SELECT s.* FROM score_items s where  
s.s_score_id_l=299   and 
(s.p_is_plu_b = 'F')  and 
isTestProduct(s.p_upc_st) = 'N'  and 
v_is_complete_b='T'  
order by s.nc_name_st, s.p_upc_st

show table status命令的表排序规则是:

代码语言:javascript
复制
 utf8_general_ci 

所有char、varchar和text字段的排序规则都是"utf8_general_ci“。对于bigint、int和datetime字段,它是空的。

数据库排序规则是latin1_swedish_ci,如命令所示:

代码语言:javascript
复制
show variables like "collation_database";

编辑:我能够使用Eclipse/STS和Tomcat 6实例在本地计算机上成功地运行这个程序。本地进程正在读取与生产服务器上的进程相同的数据库,从而产生错误。发生错误的服务器是Tomcat 7。实例是Amazon服务器。

编辑2:当我在QA环境中运行报告时,我也成功地运行了它,在server.xml重置中的JDBC语句指向生产数据库。QA本质上是生产环境的一面镜子,一些开发工作正在进行中。我还应该指出,上个月我也看到了一个类似的错误,但当我重读报告时,它就消失了。最后,我不知道为什么会有所不同,但是被查询的表是巨大的,有超过700万行,每行可能有100个字段。

编辑3:根据影子的评论,我发现测试函数上指定了字符集"latin1“。我已经将其改为utf8,并希望这样可以解决这个问题。

如何找出哪个字段是"latin1_german1_ci"?

为什么在表和字段为"utf8_general_ci或null“时使用”utf8_general_ci“进行比较?

这个问题是否与函数字符集有关,如果是,我如何识别它使用的字符集/排序规则?

如何缩小导致问题的字段/函数的范围?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-26 00:50:03

这与java或hibernate无关,这完全取决于mysql和连接字符串。

在mysql中,您可以在多个级别定义字符集和排序规则,这可能会导致许多问题:

  • 服务器
  • 数据库
  • 表格
  • 连接

有关字符集和排序规则的详细信息,请参阅mysql文档。

概括起来:如果并且只有在较低级别没有指定字符集或排序规则的情况下,更高级别的默认值才会启动。因此,列级别定义覆盖表级别定义。show table status命令显示表级默认值,但这些默认值在列级别上可能已被重写。show full columnsshow create table命令将显示任何给定字段使用的真正字符集和排序规则。

连接级别字符集/排序规则定义使情况更加复杂,因为sql语句中使用的字符串常量将使用连接字符集/排序规则,除非它们有显式声明。

但是,mysql使用矫顽力值来避免使用各种字符集和表达式引起的大多数问题,如mysql在表达式中使用的字符集/排序规则上的文档中所述。

请注意,查询在从另一台计算机执行时可以工作,这表示该问题与连接字符集/排序规则有关。我认为它将围绕着isTestProduct()调用。

要真正确定哪一种条件会导致错误,唯一的办法是逐个消除这些条件,当错误消失时,最后一个消除的条件就是罪魁祸首。但是,根据字段中使用的内容定义适当的连接字符集和排序规则也会有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37449406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档