4

有没有办法比较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

4 回答 4

7

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

您可以使用将排序规则更改为 UTF8

alter table <some_table> convert to character set utf8 collate utf8_general_ci;
于 2013-10-28T14:02:36.130 回答
5

我认为有时问题是我们使用不同的 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;

完整的细节

于 2014-08-30T01:15:10.943 回答
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界面->右击表格->Alter Table然后在界面中点击一列进行修改。

于 2016-08-02T13:36:10.087 回答
0

尽可能使用 ascii_bin ,它几乎可以匹配任何排序规则。

于 2016-08-24T12:01:40.370 回答