mySQL中非法混合排序规则

时间:2010-02-24 16:52:19

标签: mysql character-encoding collation

我需要将列从一个表转移到另一个表。源表具有与目标表(latin1_general_ci和latin1_swedish_ci)不同的排序规则。

我用

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

我得到了“非法混合排序”。

什么是快速解决方案,让这个工作,而无需更改任何一个表?我尝试使用CONVERT和COLLATE以UTF-8运行整个操作,但这没有帮助。 “条形码”仅包含数字数据(即使它们都是VARCHAR),因此无论如何都没有整理担忧。我只需要这样做一次。

  

编辑:我在所涉及的每个字段上使用CAST(fieldname as unsigned)对其进行了排序。在这种情况下我能够做到这一点,因为只有数字数据受到影响,但知道一个更通用的方法会很好,所以我将问题保持开放。

2 个答案:

答案 0 :(得分:24)

  

我尝试使用CONVERT和COLLATE以UTF-8运行整个操作,但这没有帮助。

它让我烦恼,所以今天我创建了这些表并成功运行了这个表:

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

答案 1 :(得分:0)

如果仅使用2个数字列加入select?

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