2014-08-29 42 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

相關問題