MySQL Unique-Index Groß- und Kleinschreibung

Letzt musste ich feststellen das MySQL bei VARCHAR Feldern keine Unterscheidung zwischen Groß-und Kleinschreibung macht. Aufgefallen ist mir das als ich einen INSERT in eine Tabelle ausführen wollte.

Diese Tabelle hat neben dem Feld ID das als INT NOT NULL AUTO_INCREMENT angelegt ist und als PRIMARY Key dient, ein weiteres Feld, Name, das vom Typ VARCHAR(50) NOT NULL ist. Dieses Feld hat aber anstelle des PRIMARY Constraint, einem UNIQUE Constraint und soll für eindeutige Textwerte sorgen. Genau bei diesem Feld liegt auch das Problem...

Die folgende Auflistung zeigt den aktuellen Zustand der Tabelle.

+---------+---------+
|      Id | Name    |
+---------+---------+
|       1 | abc     |
|       2 | cbd     |
+---------+---------+

Als ich nun versuchte

INSERT INTO `TableName` (`Name`) values ('ABC');

auszuführen, bekam ich eine SQL Error (1062): Duplicate entry 'ABC' for key 'Name' Fehlermeldung...

Ok. Für mich sind 'ABC', 'aBc', 'abc', und so weiter alles unterschiedliche Werte. Anscheinend nicht für MySQL.
Nach ein wenig Recherche, stellt sich heraus das ich mit meiner Annahme richtig lag. MySQL unterscheidet standardmäßig nicht zwischen Groß-und Kleinschreibung und ist somit Case-Insenitive...

Die erste Lösung die mir einfiel, war eine Änderung an der Serverkonfiguration. Allerdings wollte ich dieses Risiko nicht eingehen, da ich die Seiteeffekte nicht einschätzen konnte.
Mein zweiter Gedanke war, einfach das Attribut in der Tabelle zu ändern. Die Frage war nur, welchen Datentyp man alternativ verwenden sollte, der eben Case-Sensitve ist...

Ich entschied mich für VARBINARY. VARBINARY speichert die Daten im Binären Format ab und kann somit zwischen Groß- und Kleinschreibung unterscheiden.

Nach dem ich also

ALTER TABLE `TableName`
	CHANGE COLUMN `Name` `Name` VARBINARY(50) NOT NULL;

abgesetzt hatte, wurden die vorhandenen Daten brav ins Binäre Format konvertiert.
Auch der oben beschriebene Insert lief danach ohne Fehler.

Somit war auch dieses Problem gelöst. :)

Hinweis:
Man sollte aber nach dieser Änderung unbedingt seine Programmierung anschauen, ob die Binären Daten korrekt geladen werden!


In this article



Most Recent

Hintergrundbeleuchtung für Laptops, die als Server laufen, ausschalten
Continue reading...

More posts

Ist mein Server Magento tauglich?
Ist mein Server Magento tauglich?

Bevor man mit dem Aufwand einer Magentoinstallation anfängt, sollte man erstmal sicherstellen ob der Server das überhaupt mitmacht. Was es zu...

Drupal Community in München
Drupal Community in München

Das tolle an der Open Source Welt ist nicht unbedingt die Tatsache das die Software ohne Lizenzgebühren genutzt werden kann, sondern auch die...

Google PageRank Update: November 2012
Google PageRank Update: November 2012

Letzte Nacht hat Google angefangen die aktuellen PageRank Daten zu veröffentlichen. Nun kann man sich genau diese Daten wieder in den verschiedenen...

FLAME Malware treibt Ihr Unwesen bereits seit 2006
FLAME Malware treibt Ihr Unwesen bereits seit 2006

Im Mai dieses Jahres entdeckten Experten des russischen Antiviren-Entwicklers Kaspersky die so genannte FLAME Malware. Bei ihr handelt es sich um...