2014-08-29 44 views
0

我试图使用聚结,不具备任何行如果没有行,则返回“输入文本”。 (排序规则的非法混合)

那些进入我得到这个工作

SELECT 
COALESCE(t1.it, d.it_norow) 

FROM (SELECT 0 as it_norow 
     FROM DUAL) as d 
    LEFT JOIN 
     (SELECT t1.itemText as it 
     FROM bullet_items as t1 
     WHERE t1.cst_name = 'Cust' 
     AND t1.bullet_id = 'BD1') as t1 
     ON 1 = 1 

但是,当我改变了“0”双表

SELECT 
COALESCE(t1.it, d.it_norow) 

FROM (SELECT 'Enter text' as it_norow 
     FROM DUAL) as d 
    LEFT JOIN 
     (SELECT t1.itemText as it 
     FROM bullet_items as t1 
     WHERE t1.cst_name = 'Cust' 
     AND t1.bullet_id = 'BD1') as t1 
     ON 1 = 1 

我得到的错误Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8mb4_general_ci,COERCIBLE) for operation 'coalesce'

我怎样才能使“输入文字”工作时,有没有行?

+0

你能重现问题通过提供[*'Fiddle Demo' *](http://sqlfiddle.com/)? – 2014-08-29 18:50:18

回答

1

简单的回答,解决您的查询:

SELECT _latin1'Enter text' 
     ^^^^^^^ 

(这是假设的bullet_items.itemText是LATIN1的字符集,和您的客户端的字符集是UTF8)

这里也有一些其他的语法,但他们都实现了基本相同的事情......这使得it_norrow列(在派生表中)具有latin1字符集。

有一个更长的解释(关于数据库列,客户端的字符集的字符集和转换的字符集之间的语义中,CAST和CONVERT函数,等。)

+0

哇那么简单。有效!谢谢! – sleepsleepsleep90731 2014-08-29 18:29:22

相关问题