2010-02-24 94 views
8

我需要將列從一個錶轉移到另一個表。源表與目標表有不同的排序規則(latin1_general_ci和latin1_swedish_ci)。mySQL中排序規則的非法組合

我用

UPDATE target 
LEFT JOIN source ON target.artnr = source.artnr 
SET target.barcode = source.barcode 

我得到一個 「排序規則的非法組合」。

什麼是快速修復得到這個工作,而不必改變任何表?我嘗試了CONVERT和COLLATE以UTF-8運行整個操作,但這並沒有幫助。 「條形碼」僅包含數字數據(即使它們都是VARCHAR),因此無論哪種方式都不存在排序問題。我只需要做一次。

編輯:我在涉及的每個領域使用CAST(fieldname as unsigned)對它進行了整理。在這種情況下,我能夠做到這一點,因爲只有數字數據受到了影響,但如果知道更爲一般的方法,我將很高興,所以我將這個問題留給公開。

回答

19

我試圖CONVERT和整理運行在UTF-8的整個操作,但沒有幫助。

它竊聽我,所以今天我創建的那些表和成功後,該跑一個:

UPDATE target 
LEFT JOIN source ON(target.artnr = source.artnr COLLATE latin1_swedish_ci) 
SET target.barcode = source.barcode 
+0

甜,這是有效的。謝謝! – 2010-02-25 22:44:56

0

如何加入選擇只有2個數字列?

UPDATE target 
LEFT JOIN (
    SELECT 
     artnr COLLATE latin1_swedish_ci AS artnr, 
     barcode COLLATE latin1_swedish_ci AS barcode 
    FROM source 
    ) source ON target.artnr = source.artnr 
SET target.barcode = source.barcode 
+0

乾杯,構思巧妙,但兩者artnr物品和條形碼是,即使它們只包含數字數據,所以即使VARCHAR處理他們一個人會造成這個問題。我會在我的問題中強調這一點。 – 2010-02-24 18:38:12

+0

檢查我的更新答案,唯一改變的是在每個列的子選擇中添加排序規則(以及在其之後的別名適當的別名) – 2010-02-24 19:46:38

相關問題