Sandy: utf8 als latin1 => konvertierung per blob schlägt fehlt

Beitrag lesen

Hallo Allemann,

ich habe mich nur durch eine Menge Threads zum Thema utf-8 Speicherung von Daten gequält und auch schon eine Menge dazugelernt.

Ich habe eine Zeitlang - nicht wirklich sauber - utf-8 Daten in latin1 Datenbankfeldern gespeichert (mysql-DB). Da man das nicht wirklich so lassen kann, muss ich die ganze Geschichte jetzt umstellen.

Ist ja auch nicht weiter schlimm. Alle Textfelder (varchar,char,text etc.) in Blob umwandeln - ALTER TABLE blablubb CONVERT TO CHARACTER SET utf8 - zwischenzeitlich die Felddefinitionen merken und dann wiederherstellen. Also zurückwandeln in varchar, text oder was immer es vorher war.

Das Problem an der ganzen Geschichte ist nur, dass die Felder gekürzt werden. Habe noch nicht rausgefunden, ob es da eine bestimmte Regel gibt, aber wo vorher das stand:

'Да. При оплате покупки с помощью бонусов, Вам не будут начислены бонусы с той части суммы, которая оплачивается ранее полученными бонусами. Это правило в дальнейшем может меняться, поэтому советуем Вам следить за обновлениями на сайте.' (Das war vorher in phpmyadmin nicht wirklich in dieser form zu lesen - alles mehr oder weniger Datenmüll, weil utf8 als latin gespeichert war.)

Steht jetzt das:

'Да. При оплате покупки
(In phpmyadmin sieht's perfekt aus und auf der Seite auch, wenn ich SET NAMES utf8 nach der connect einsetze - aber es ist zu kurz.)

D.h. mir geht bei der Blob-Wandlung etwas verloren. Mir ist rätselhaft wie das passieren kann - ich dachte der Feldinhalt wird verkapselt und gut ist.

Hat jemand sowas schonmal gemacht und vielleicht eine Lösung?

Vorgehensweise ist folgende:
1. ALTER TABLE translations\_werte CHANGE varwert varwert BLOB NOT NULL
2. ALTER TABLE translations\_werte CONVERT TO CHARACTER SET utf8
3. ALTER TABLE translations\_werte CHANGE varwert varwert TEXT NOT NULL

Hat jemand eine Idee?

Gruss,
Sandy