2012-06-06 30 views
1

我有一個觀點 「name_all」,它的結構是MySQL變更整理鑑於

colName  varchar(30) utf8_general_ci 

date varchar(76)  utf8_general_ci 

name varchar(43) latin1_swedish_ci 

,當我嘗試運行查詢:

SELECT CONCAT(`colname`,' of Mr. ',`name`,' Expire on ',`date`) FROM name_all 

它給錯誤:

#1271 - Illegal mix of collations for operation 'concat' 

"colName" is basically a Column Name which is used as a row in this View 

"date" is mysql Date which is converted in this format '%a %D %b, %Y' 

"name" is concatenation of firstname, middlename, lastname from a table 

我該如何解決這個問題,我的錯誤是什麼?

當我運行查詢SHOW VARIABLES LIKE「歸類%」 結果

Variable_name   Value 
    collation_connection utf8_general_ci 
    collation_database latin1_swedish_ci 
    collation_server  latin1_swedish_ci 

回答

1

即使你說「所有的表和列在latin1_swedish_ci」,什麼喲ü發佈是:

colName varchar(30) utf8_general_ci 

date varchar(76) utf8_general_ci 

name varchar(43) latin1_swedish_ci 

將colName和日期歸類更改爲latin1_swedish_ci可能會解決您的問題。

+0

但我怎麼能在「意見」 – Shujaatali

+0

好問題。您必須在數據庫的表中執行此操作,View就像查看具有一些定義的規則集的數據表一樣[正如名稱暗示「VIEW」]。因此,視圖不會更改架構的任何基礎設計。嘗試在數據庫級別更改collotion。 – Shiham

+0

謝謝.......通過手動更改數據庫和表格整理來解決它 – Shujaatali

0

對於任何遇到此線程的人,視圖列上的排序規則由基礎表列決定,除非列是視圖中定義的硬編碼字符串(例如,定義某個字符串值的CASE)。在這些情況下,排序規則由視圖創建期間指定的字符集確定。在視圖定義中,導出客戶端(如HeidiSQL)可能會包含可執行註釋,這些註釋會將字符集設置爲默認值而非您的預期集合。當你重新運行定義時,你現在已經保存了不匹配的集合。運行「顯示來自viewName的完整列」進行檢查。