我正在运行C#应用程序的代码,该应用程序调用数据库来报告数据。有趣的是,该报告在我自己的PC上运行良好,但是当我在客户端使用时,我得到了:
在concat中非法混合排序(latin1_swedish_ci,IMPLICIT)和(utf8_general_ci,COERCIBLE)
到目前为止,我已经检查了表(ENGINE=InnoDB DEFAULT CHARSET=latin1;
),它们在我们的两个数据库之间是相同的。此外,我可以备份客户端数据库,在我自己的PC上恢复它并运行代码,它工作正常。
我怀疑这是一个MySQL相关的错误,因为他们运行MySQL Server 5.0,而我在自己的计算机上有MySQL Server 5.1。这两个版本之间是否有任何明显的差异或其他明显的地方看起来会导致另一台PC上的错误而不是我自己的错误?
以下是我能够解决的违规代码:
原文:
"Case when s.type in (" + IDList + ") then concat(s.id,(case when coalesce(p.ID, ps.ID) in ('ABC') then '.M' else '.U' end)) else case when s.id is NULL OR s.other_id='' then s.symbol else s.id end end as 'BLAH' "
修复已分配的内容:
"Case when s.type in (" + IDList + ") then concat(CAST(s.id as CHAR),(case when coalesce(p.ID, ps.ID) in ('ABC') then '.M' else '.U' end)) else case when s.id is NULL OR s.other_id='' then s.symbol else s.id end end as 'BLAH' "
这是由MySQL在其PC上使用的默认字符集引起的吗? my.ini文件确实有一个额外的区别,我的指定:
'character-set-server=latin1'
而只有包含:
'default-character-set=latin1'
编辑包括在两个数据库中也使用排序规则latin1_swedish_ci
指定表列。
使用第一条评论中的链接,我使用了“show table status”和“show variables like”collation_database“。
显示表状态确认每个表的Collation在我和另一个系统上都是latin1_swedish_ci。
显示collation_database等变量确认我的系统和其他系统都将latin1_swedish_ci作为值
答案 0 :(得分:0)
至于我的研究,默认排序规则和字符集已从MySQL-server 5.0更改为5.1。
请尝试将以下行添加到my.cnf并重新启动服务器:
character_set_client=utf8
character_set_server=utf8
collation_server=utf8_general_ci
并检查问题是否仍然存在。我的问题是,客户端可以请求具有自己的字符集或排序规则的字符串,直到客户端没有服务器定义的字符集。
请注意,在上一个MySQL版本中,参数名称略有变化。我正在使用MySQL 5.5,上面的参数对我来说运行正常,从那时起我没有任何非法混合的归类错误。