Hallo Crypi,
[quote=“Crypi”]SELECT ‘XXXMÜLLERYyyy’ ~* ‘.müller.’]
Eindeutig nein!
:!: Das nachfolgend geschriebene ist keine Garantie, das die beschriebenen Eigenschaften auch so in PostgreSQL z.Z. implemetiert sind. Der kleine Unterschied, zwischen Theorie und Praxis, zum besseren Verständnis! (Doku ist maßgebend) :!:
Locale definieren Sprachen und Formate.
PostgreSQL kennt derzeit die folgenden Locale: LC_MESSAGES, LC_MONETARY, LC_NUMERIC und LC_TIME.
LC_MESSAGES definiert die (Landes-) Sprache, in der Mitteilungen ausgegeben werden.
LC_MONETARY definiert die Formatierung von Geldbeträgen.
LC_NUMERIC definiert die Formatierung von Zahlen.
LC_TIME definiert die Formatierung von Datums- und Zeitwerten.
Diese Locale gelten für den Server und bedeuten bezüglich LC_MONETARY, LC_NUMERIC und LC_TIME, dass der Server beim Import von Daten, für die jeweils zugehörigen Daten-Typen, die definierten Formate erwartet und beim Export die entsprenden definierten Formate liefert.
Da die Locale von PostgreSQL in einer eigenen Datei stehen, sind sie unabhängig vom Betriebssystem. Rein theoretisch könnte man die Werte so definieren, dass die Mitteilungen in chinesisch ausgeben werden, die Formatierung von Datums- und Zeitwerten dem deutschem Format und die Formatierung von Zahlen dem US-Format entspricht.
Worüber wir hier reden ist Abhängigkeit vom Zeichensatz, den die Datenbank intern verwendet und mittels ‘encoding’ definiert wird. Dieser ist nicht zu verwechseln mit dem Zeichensatz des Clients, der mittels ‘client_encoding’ vorgegeben wird und in dem der Datentransfer zwischen Client und Server erfolgt. Sind der Zeichensatz von Client und Datenbank nicht gleich, so wird intern (Datenbank) eine Konvertierungs-Funktion aufgerufen. Siehe Convert-Funktion in der Doku.
Bei den Zeichensätzen muss man nun unterscheiden zwischen den Ein-Byte- und den Multi-Byte-Zeichensätzen. Ein Ein-Byte-Zeichensatz sind z.B. die Zeichensätze latin… . Der bekannteste Multi-Byte-Zeichensatz ist Unicode. Unicode verwendet für ein Zeichen zwische 1-4 Byte. Außer den ASCII-Zeichen (0x00 - 0x7F) haben alle andere Zeichen 2, 3 oder 4 Byte.
Wenn hier die Bezeichnung UTF-8 genannt wird, ist immer Unicode gemeint. UTF-8 selbst ist auch keine Zeichensatz sondern Kodierungsart für Unicode-Zeichen.
So, nun kanst Du dir mal Überlegen, warum ein Test mit “Miller” immer und mit “Müller” nicht immer funktioniert.
In der Table 21.1. “Server Character Sets” im englischen Manual kannst Du die notwendigen Bytes für die einzelnen Zeichensätze nachlesen.
Eine Beschreibung über die UTF-8 Kodierung kannst Du hier finden: http://de.wikipedia.org/wiki/UTF8.
Einen UTF Converter gibt es hier: http://www.macchiato.com/unicode/convert.html.
Und zu Zeichen-Tabellen habe ich hier auch noch ein Link: http://www.gymel.com/charsets
mfg
fristo