2010-02-24 16 views
8

Necesito transferir una columna de una tabla a otra. La tabla de origen tiene una clasificación diferente a la tabla de destino (latin1_general_ci y latin1_swedish_ci).Mezcla ilegal de colaciones en mySQL

utilizo

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

me sale un "mezcla ilegal de colaciones".

¿Qué es una solución rápida para que funcione sin tener que cambiar ninguna de las tablas? Intenté CONVERT y COLLATE para ejecutar toda la operación en UTF-8, pero eso no ayudó. "código de barras" solo contiene datos numéricos (aunque todos ellos son VARCHAR), por lo que no hay problemas de intercalación de ninguna manera. Necesito hacer esto solo una vez.

Editar: Lo ordené usando un CAST(fieldname as unsigned) en cada campo involucrado. Pude hacerlo en este caso porque solo se afectaron los datos numéricos, pero sería bueno conocer un enfoque más general de esto, así que dejo la pregunta abierta.

Respuesta

19

He intentado convertir y Intercalar para ejecutar toda la operación en UTF-8, pero eso no ayuda.

Se me molestó, así que hoy he creado esas tablas y con éxito corrió éste:

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

Dulce, eso funciona. ¡Gracias! –

0

¿Qué le parece unirse en seleccionar con solo 2 columnas numéricas?

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

Cheers, idea inteligente, pero ambos artnr y código de barras son varchars a pesar de que sólo contienen datos numéricos, por lo que incluso solo ellos causarán el problema. Voy a enfatizar eso en mi pregunta. –

+0

Verifique mi respuesta actualizada, lo único que ha cambiado es agregar la intercalación en la subselección para cada columna (y el alias del alias apropiado después de ella) –

Cuestiones relacionadas