Sammenligning af felter med forskellige tegnset i MySQL

Det kan være en udfordring hvis man arbejder med forskellige tegnset i databaser. F.eks. hvis man vil sammenligne data i to felter med forskellige tegnset.

I dette eksempel med to tabeller table1 og table2, er table1.field i latin1_general_ci og table2.field i utf8_general_ci, så hvis man forsøger at udføre følgende SQL sætning:

SELECT t1.field FROM table1AS t1, table2 AS t2 WHERE t1.field = t2.field;

vil MySQL komme med fejlen:

SQLSTATE[HY000]: General error: 1267 Illegal mix of collations (latin1_general_ci,IMPLICIT)
and (utf8_general_ci,COERCIBLE) for operation '='

For at løse dette kan man enten vælge at ændre sine data og tabel struktur så det alt samme er i det samme tegnset (UTF8 eller LATIN1),

ALTER TABLE table1 CONVERT TO CHARACTER SET utf8_general_ci;

eller man kan konvertere data i sin SQL sætning:

SELECT t1.field FROM table1AS t1, table2 AS t2 WHERE CONVERT(t1.field USING utf8) = CONVERT(t2.field USING utf8);

Leave a comment

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *

This site uses Akismet to reduce spam. Learn how your comment data is processed.