MySQL: Zeichen in String ersetzen

Wer sich schon mit der Pflege von Artikeldaten via Datenbank beschäftigt hat, der weiß, dass Inhalte eines Feldes nicht gleich dem sind, wonach es auf den ersten Blick aussieht. Bei der Eingabe von Daten können Anwender vielerlei Fehler machen. Beispielsweise können Artikelnummern mit einem Leerzeichen davor oder auch danach eingegeben werden, es können sich HTML-Entities durch copy/paste einschmuggeln etc. Selbst Administratoren werden nicht von solchen Fehlern verschont. So kann es bspw. sein, dass ein Datenimport via Script automatisiert werden soll. Dieses Script wird im Lieblingstexteditor bearbeitet. Codeeinrückungen via Tabulator oder Leerzeichen gehören hierbei schon fast zum Standard. Was passiert aber nun, wenn sich solch ein unsichtbares Steuerzeichen in die SQL-Abfrage wie z. B. in ein UPDATE-Statement der Spalte Artikelnummer einschleicht?

Ein einfaches SELECT auf:

könnte evtl. kein Ergebnis zurückliefern, da sich vor oder nach der Artikelnummer ein Leerzeichen befindet. Vor allem wenn sich solch ein Zeichen nach dem Eintrag befindet, ist es erst mal nicht ersichtlich.

Auffinden von Steuerzeichen innerhalb eines Strings

Um solche Steuerzeichen aufzuzeigen, kann CHAR(MEIN_ZEICHEN) verwendet werden. MEIN_ZEICHEN ist hierbei das Zeichen, welches bei der Ausgabe als sein Unicode Pendant dargestellt werden soll. Ein Leerzeichen wird in unserem Fall nun als 32 angezeigt. Ein Blick in die Unicode-Tabelle verrät uns, dass es sich hierbei tatsächlich um das Leerzeichen handelt.

Ein replace in Verbindung mit CHAR leistet uns hierbei gute Dienste.

Das Ergebnis ist dieses Mal, der gesuchte Artikel, da das Leerzeichen durch „nichts“ also “ (eine leere Zeichenfolge) ersetzt wurde. Der String wurde also für unsere Abfrage bereinigt.

Anmerkung

Selbstverständlich hätten wir auch direkt ein Leerzeichen “ “ in unser replace aufnehmen können, die Unicode-Variante ist aber immer die sicherste Variante.

Add Comment