2013-08-20 44 views
4

當我運行以下查詢:歸類(utf8_unicode_ci,COERCIBLE)和(utf8_general_ci,COERCIBLE)操作 '=' 的非法混合

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 
) 

我得到的錯誤:

Illegal mix of collations (utf8_unicode_ci,COERCIBLE) and (utf8_general_ci,COERCIBLE) for operation '='

「 tipo「獲取爲utf8_unicode,但其他字段爲utf8_general ...如何進行轉換,轉換?

回答

4

的錯誤消息是相當混亂,因爲它指定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, ... 
1

我也有類似的問題。我所做的就是隔離導致錯誤的where子句中的比較。我將值爲I的CONVERT函數與表格的排序對比。

`field` = CONVERT(value USING charset_of_table) 

this post的更多細節和例子使用CONVERT

相關問題