"ü" statt "ü" in MySQL
Unsterblich
- perl
Hallo.
Habe ein kleines Problem mit den Sonderzeichen in der Datenbank (in dem Fall speziell die Umlaute).
User können auf einer Seite (utf8-codiert) Texteingaben machen. Dabei sind Umlaute erlaubt. Die Änderungen werden über ein utf8-Perlscript mit einer utf-8 Datenverbindung in einem utf8-unicode-Feld in der Datenbank abgespeichert. Dummerweise speichert diese nun aber alle Sonderzeichen Marke "ü" statt "ü". An und für sich wäre das ja kein Problem, hätten wir uns hier nicht aus sehr wichtigen Performancegründen für char sondern für varchar als Feldtyp entschieden. Es sind also 15 Zeichen für den zu speichernden Namen von der Webseite aus zulässig. Begrenze ich nun die Feldlänge auf 15 Zeichen, passen nur 7,5 Umlaute in das Feld. Beliebige Untermengen sind natürlich genauso problematisch. Verwendet beispielsweise irgendwer "12345678901234ü" als Namen, so bleibt davon nach der Speicherung "12345678901234Ã" übrig, weil der zweite Teil vom ü im Datenbankfeld keinen Platz mehr findet. "üüüüüüüü" endet als "üüüüüüüÃ" weil der das durch den fehlenden Platz komplett zerhaut.
Um das Problem zu umgehen habe ich momentan einfach die Große des Datenbankfeldes gegenüber der maximalen Eingabegröße verdoppelt und das funktioniert natürlich auch. Allerdings macht das so keinen sehr professionellen Eindruck. Gibt es da eine andere Lösung? Die Datenbank kann über phpmyadmin ja auch Umlaute direkt abspeichern und muß nicht diese Krickelkrackel stattdessen speichern. Wie bekomme ich die da rein?
Hallo,
User können auf einer Seite (utf8-codiert) Texteingaben machen. Dabei sind Umlaute erlaubt. Die Änderungen werden über ein utf8-Perlscript mit einer utf-8 Datenverbindung in einem utf8-unicode-Feld in der Datenbank abgespeichert. Dummerweise speichert diese nun aber alle Sonderzeichen Marke "ü" statt "ü". An und für sich wäre das ja kein Problem, hätten wir uns hier nicht aus sehr wichtigen Performancegründen für char sondern für varchar als Feldtyp entschieden. Es sind also 15 Zeichen für den zu speichernden Namen von der Webseite aus zulässig. Begrenze ich nun die Feldlänge auf 15 Zeichen, passen nur 7,5 Umlaute in das Feld.
irgendwo ist ein Fehler in Deiner Darstellung. Wenn Du für eine Spalte angegeben hast, dass es sich bei den gespeicherten Daten
- um UTF-8-Zeichenkodierung handelt,
- und 15 Zeichen erlaubt sind,
dann passen in dieses Feld 15 Zeichen, auch Sonderzeichen. Getestet, passt.
(Voraussetzung: MySQL 4.1 und höher, selbstverständlich)
Freundliche Grüße
Vinzenz
Moin!
User können auf einer Seite (utf8-codiert) Texteingaben machen. Dabei sind Umlaute erlaubt. Die Änderungen werden über ein utf8-Perlscript mit einer utf-8 Datenverbindung in einem utf8-unicode-Feld in der Datenbank abgespeichert. Dummerweise speichert diese nun aber alle Sonderzeichen Marke "ü" statt "ü". An und für sich wäre das ja kein Problem, hätten wir uns hier nicht aus sehr wichtigen Performancegründen für char sondern für varchar als Feldtyp entschieden. Es sind also 15 Zeichen für den zu speichernden Namen von der Webseite aus zulässig. Begrenze ich nun die Feldlänge auf 15 Zeichen, passen nur 7,5 Umlaute in das Feld.
irgendwo ist ein Fehler in Deiner Darstellung. Wenn Du für eine Spalte angegeben hast, dass es sich bei den gespeicherten Daten
- um UTF-8-Zeichenkodierung handelt,
- und 15 Zeichen erlaubt sind,dann passen in dieses Feld 15 Zeichen, auch Sonderzeichen. Getestet, passt.
(Voraussetzung: MySQL 4.1 und höher, selbstverständlich)
Korrekt. MySQL reserviert in einem CHAR-Feld dann automatisch die dreifache Menge an Bytes, um für jeden Extremfall von Zeichenkombination, die im von MySQL akzeptierten UTF-8-Bereich vorkommen kann, bereit zu sein.
Wenn nur 7,5 Zeichen in ein 15-Zeichen-Feld passen, dann klingt dies sehr danach, dass die zwei UTF-8-Bytes des Umlautes ihrerseits nochmal UTF-8-codiert werden, bevor sie in die Datenbank kommen.
- Sven Rautenberg