mysql查询中的非法混合排序错误

时间:2013-10-28 13:59:16

标签: mysql sql collation

有没有办法比较mysql查询中生成的范围列?

SELECT ue.bundle,ue.timestamp,b.id,bv.id as bundleVersionId,bv.start_date,bv.end_date, bv.type,ue.type from (
 SELECT bundle,timestamp,tenant, case when Document_Id ='' then 'potrait'
 WHEN Document_Id<>'' then 'persisted' end   as type from uds_expanded ) ue
 JOIN bundle b on b.name=ue.bundle  join bundle_version bv on b.id=bv.bundle_id 
 WHERE ue.tenant='02306' and ue.timestamp >= bv.start_date and ue.timestamp <=bv.end_date and **ue.type=bv.type ;**

当我尝试比较类型时,我收到以下错误

 Error Code: 1267. Illegal mix of collations (utf8_general_ci,COERCIBLE) and (latin1_swedish_ci,IMPLICIT) for operation '=' 0.000 sec

4 个答案:

答案 0 :(得分:6)

坚持整个系统的一个编码/整理。现在你似乎在一个地方使用UTF8而在另一个地方使用latin1。转换后者也使用UTF8,你会很好。

您可以使用

将排序规则更改为UTF8
alter table <some_table> convert to character set utf8 collate utf8_general_ci;

答案 1 :(得分:4)

我认为有时问题是我们使用不同的orm实用程序来生成表,然后我们想通过mysql命令行或MySql工作台来测试查询,然后这个问题是由于表排序规则与命令行或应用程序的差异造成的使用。简单的方法是定义变量(用于根据表列测试查询的变量)

例如:

MySQL>
MySQL> set @testCode = 'test2' collate utf8_unicode_ci;
Query OK, 0 rows affected (0.00 sec)

MySQL> select * from test where code = @testCode;

full details

答案 2 :(得分:0)

请注意,单列可以进行整理。

例如,Doctrine会将VARCHAR类型的列生成为CHARACTER SET utf8 COLLATE utf8_unicode_ci,并且更改表格排序不会影响单个列。

您可以使用以下命令更改列的排序规则:

ALTER TABLE `table` 
CHANGE COLUMN `test` `test` VARCHAR(15) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci'

或在MySql Workbench界面中 - &gt;右键点击表格 - &gt;更改表格,然后在界面中单击列并进行修改。

答案 3 :(得分:0)

尽可能使用ascii_bin,它几乎与任何整理相匹配。