操作'='的非法混合排序(utf8_unicode_ci,COERCIBLE)和(utf8_general_ci,COERCIBLE)

时间:2013-08-20 17:06:22

标签: mysql casting

当我运行以下查询时:

CREATE ALGORITHM = UNDEFINED VIEW d_view_galerias AS (
SELECT id, titulo, 'foto' AS tipo, '' AS embed
FROM d_galeria_fotos
)
UNION (

SELECT id, titulo, 'video' AS tipo, embed
FROM d_galeria_videos
)

我收到错误:

  

操作'='的非法混合排序(utf8_unicode_ci,COERCIBLE)和(utf8_general_ci,COERCIBLE)

“tipo”的格式为utf8_unicode,但其他字段为utf8_general ...如何进行转换,转换?

3 个答案:

答案 0 :(得分:4)

错误消息相当混乱,因为它指定了operation = - 这在您发布的查询中并不明显,但是由仅选择 distinct UNION查询引起值。因此,使用隐式平等比较法。

无论如何,您始终可以使用COLLATE子句强制列的排序规则。下面是一个示例,假设您要更改列tipo

的排序规则
SELECT id, titulo, 'foto' COLLATE utf8_general_ci AS tipo

... 
UNION SELECT id, titulo, 'video' COLLATE utf8_general_ci AS tipo, ...

答案 1 :(得分:1)

我有类似的问题。我所做的是隔离导致错误的where子句中的比较。我在值I上运行CONVERT函数进行比较,并进入表的排序规则。

`field` = CONVERT(value USING charset_of_table)

有关使用CONVERT

的更多详细信息和示例,请参阅this post

答案 2 :(得分:0)

在我的sql工作台中的SQL Schema上,单击设计图标。在那里更改字符集。就我而言,错误消失了。