【问题标题】:Illegal mix of collations (utf8_unicode_ci,COERCIBLE) and (utf8_general_ci,COERCIBLE) for operation '='非法混合排序规则 (utf8_unicode_ci,COERCIBLE) 和 (utf8_general_ci,COERCIBLE) 用于操作 '='
【发布时间】:2013-08-20 17:06:21
【问题描述】:

当我运行以下查询时:

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 ...如何进行转换,转换?

【问题讨论】:

    标签: mysql casting


    【解决方案1】:

    错误消息相当混乱,因为它指定了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, ...
    

    【讨论】:

      【解决方案2】:

      我遇到了类似的问题。我所做的是隔离导致错误的 where 子句中的比较。我对要比较的值运行了CONVERT 函数,并将其与表格的排序规则进行比较。

      `field` = CONVERT(value USING charset_of_table)
      

      有关使用 CONVERT 的更多详细信息和示例,请参阅 this post

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-12-07
          • 2010-10-30
          • 2010-09-16
          • 2015-06-03
          • 2015-09-16
          • 2016-09-17
          • 2016-06-14
          • 2021-05-06
          相关资源
          最近更新 更多