我需要将列从一个表转移到另一个表。源表具有与目标表(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)
对其进行了排序。在这种情况下我能够做到这一点,因为只有数字数据受到影响,但知道一个更通用的方法会很好,所以我将问题保持开放。
答案 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