PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Datenbank Zeichensatz utf-8



Mathew73
29-12-2005, 18:02
Hallo,

eine Software soll von einer Datenbank Artikelbezeichnungen lesen. Diese sind in verschiedenen Sprachen.

Sollte ich von Anfang an alles auf utf-8 einstellen ???

Oder spielt das bei der Datenbank selber keine Rolle ???

Am Client, Linuxconsole müsste ich dann auch überall utf-8 einstellen und ich kann alle Zeichen überall anzeigen oder ???

Dankääääää

mwanaheri
29-12-2005, 19:28
Ich würde für alles eine einheitliche Kodierung wählen, also auch die Datenbank au utf-8 stellen. Andernfalls kann es dir passieren, dass du irgendwo den Codewechsel vergisst und dann in Teufels Küche kommst. Ob es für die Datenbank einen Unterschied macht, kann ich nicht genau sagen, aber wenn ein varchar eine 1-Byte-Kodierung erwartet, kann er möglicherweise über utf-8 stolpern oder eine geringere Länge erlauben.

Wenn du nicht direkt von der Konsole auf die Datenbank zugreifst, ist die dortige Kodierung nicht so wichtig, die bei den Client-Programmen hingegen schon, auch beim Text-Export/Import spielt es eine Rolle.

Jasper
29-12-2005, 22:25
falls es hier um oracle geht:

utf8 (altes utf8) ist mist (längensemantikproblem und performance) und würde ich nicht als default zeichensatz nehmen. besser ist ein zeichensatz fester breite, z.b. 1byte-zeichensatz wie we8iso8859p15 als default und einen utf-zeichensatz wie al32utf8 als national character set.
die spalten mit den artikelbezeichnungen dann einfach als nvarchar2 definieren, damit gibt es am wenigsten probleme.


-j

Mathew73
29-12-2005, 23:06
Hammer !!! Also ich Fall noch tot um.

Jetzt lasse ich den sqlserver mit default-character-set=utf8 in my.cnf laufen. Erstelle eine Tabelle und nem Datensatz "Müller". Bei php gebe ich an, dass es sich um eine UTF-8 Kodierung handelt und er zeigt dann auch Müller richtig auf der Webseite an.

Gehe ich aber über mysql von einer Linuxconsole, erhalte ich ein Fragezeichen, obwohl ein echo $LANG ein de_DE.UTF-8 ergibt. Egal was ich in LANG oder LC_ALL angebe, es interessiert ihn nicht !!!

Was auch merkwürdig ist: Ein vorheriger Eintrag Müller wird als M?ller auf der Console angezeigt. Lasse ich den Server auf utf-8 laufen, trage Müller neu ein, erhalte ich auf der Console ein ??????. Hääää ???

Erstelle ich eine Datei mit dem VI und gebe Umlaut ein, sagt er mir unter file Datei ein UTF-8 Unicode text. Also hat er das utf-8 doch angenommen in der Console.

HILFÄÄÄÄÄ

Jasper
30-12-2005, 11:37
schalt mal das terminal mit unicode_start in unicode. oder starte ein uxterm und sieh dir den output an.


-j

Mathew73
30-12-2005, 11:56
Hi,

ich musste beim mysql Server nicht nur den Server auf utf-8 umstellen, sondern auch die Clientverbindungen :eek:

OK, Console funktioniert. Ein Problem gelöst, wieder zwei neue Probleme.

Ersten muss ich die Anzahl der Zeichen prüfen und obwohl er 8 Zeichen auf der Console anzeigt, gibt er bei wc -c an, dass es 9 Zeichen sind, wenn ein Sonderzeichen im Text vorhanden ist :-(

Nun habe ich alles auf uft-8 und der Epson Bondrucker druckt bei Sonderzeichen und Umlauten nur durcheinander. Muss ich den auch auf utf-8 umstellen bzw. ich sehe nirgendwo eine Option den auf utf-8 umzustellen :-(

Gruß und Danke

ninguno
30-12-2005, 12:59
Ersten muss ich die Anzahl der Zeichen prüfen und obwohl er 8 Zeichen auf der Console anzeigt, gibt er bei wc -c an, dass es 9 Zeichen sind, wenn ein Sonderzeichen im Text vorhanden ist :-(probier mal
wc -m
wc --char

Mathew73
30-12-2005, 13:06
*froi* ein Problem weniger ohne das ein neues Problem auftaucht :D

hmmm, jetzt wo man es sieht ist es auch einfach. Ich nutzte nur -c für Zeichen und -l für Lines. Das man dann -m nehmen sollte ist in der Anleitung ersichtlich :eek:

Ich war schon dabei if-Anweisungen zu schreiben um die Sonderzeichen zu suchen und dann von wc -c ein Zeichen abzuziehen :confused:

Dankääää