Illegal mix of collations-foutmelding (MySQL)
Foutmelding
2 Mei 2017 bracht de volgende foutmelding:
Error Code: 1271. Illegal mix of collations for operation 'concat'
Oorzaak
Dit betrof een sproc met daarin een hoop concatenations. Aan het begin van die sproc werd een tijdelijke tabel gegenereerd, en wel in latin-1 en niet in utf8.
Daarnaast werd een enkele losse kolom ook in latin-1 geïniteerd ipv. utf8.
Oplossing
Tijdelijke tabel aanpassen
De code waarin die tabel wordt aangemaakt, uitgebreid met een statement tav. character set. Dit werd de code voor het genereren van die tijdelijke tabel:
drop table if exists root_tmp; create table root_tmp select * from root_child; alter table root_tmp add index sku (sku asc); alter table root_tmp add index tool_id (tool_id asc); alter table root_tmp add index tool_type (tool_type asc); alter table root_tmp character set = utf8; -- ←- Dit is 'm! alter table root_tmp change column tool_id tool_id VARCHAR(255) CHARACTER SET 'utf8' -- ←- Dit is 'm ook! NULL DEFAULT NULL COMMENT 'Dit is een vereenvoudigede tool_id. Goede kans dat-ie niet precies overeenkomst met tabel tool' ;
P.s.: Ik weet niet zeker of ik alle velden moet herhalen tav. velddefinitie
Alle tabellen aanpassen
- Met
show tables
alle tabelnamen opgevraagd - Tabelnamen gekopiëerd naar editor en daar een een compleet alter table van elke tabel van gemaakt
- Die code uitgevoerd
Alle kolommen van alle tabellen aanpassen
Da's de eigenlijke echte oplossing. Komt nog. Als op de dag de pijn erg genoeg is.