当我运行以下查询时:
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 ...如何进行转换,转换?
答案 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上,单击设计图标。在那里更改字符集。就我而言,错误消失了。