Illegal mix of collations-foutmelding (MySQL)

Uit De Vliegende Brigade
Ga naar: navigatie, zoeken

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.

Bron