Неверное сочетание параметров сортировки в MySQL - PullRequest
8 голосов
/ 24 февраля 2010

Мне нужно перенести столбец из одной таблицы в другую. Исходная таблица имеет сопоставление, отличное от целевой таблицы (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 ]

24 голосов
/ 26 февраля 2010

Я пытался выполнить CONVERT и COLLATE, чтобы выполнить всю операцию в UTF-8, но это не помогло.

Это меня раздражало, поэтому сегодня я создал эти таблицы и успешно запустил эту:

UPDATE target
LEFT JOIN  source ON( target.artnr = source.artnr COLLATE latin1_swedish_ci )
SET target.barcode = source.barcode
0 голосов
/ 24 февраля 2010

Как насчет объединения на выбор только с 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
...