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

use*_*359 5 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
)
Run Code Online (Sandbox Code Playgroud)

我得到错误:

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

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

Syl*_*oux 6

错误消息按照它的指定相当令人困惑operation =-从您发布的查询中不明显,但由UNION仅选择不同值的查询引起。因此,隐式使用相等比较。

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

SELECT id, titulo, 'foto' COLLATE utf8_general_ci AS tipo

... 
UNION SELECT id, titulo, 'video' COLLATE utf8_general_ci AS tipo, ...
Run Code Online (Sandbox Code Playgroud)