Sven Rautenberg: "ü" statt "ü" in MySQL

Beitrag lesen

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

--
"Love your nation - respect the others."