Wie wird ein Tausendertrennzeichen für PostgreSQL gesetzt?

8

Ich möchte lange Zahlen mit Tausendertrennzeichen formatieren. Es kann mit to_char function wie folgt gemacht werden:

%Vor%

Aber wenn mein PostgreSQL-Server mit UTF-8-Kodierung in der polnischen Version von Windows ist, endet SELECT mit:

%Vor%

In to_char pattern G wird wie folgt beschrieben: Gruppentrennzeichen (verwendet Gebietsschema) . Dieser SELECT funktioniert ohne Fehler, wenn der Server unter Linux mit polnischem Gebietsschema ausgeführt wird.

Als Workaround verwende ich Leerzeichen anstelle von G in Formatzeichenfolge, aber ich denke, es sollte möglich sein, tausend Trennzeichen wie in Oracle zu setzen:

%Vor%

Ist diese Einstellung für PostgreSQL verfügbar?

    
Michał Niklas 29.07.2010, 08:47
quelle

2 Antworten

10

Wenn Sie psql verwenden, können Sie Folgendes ausführen:

%Vor%

Beispiel:

%Vor%     
Ali Akbar 04.05.2015 05:02
quelle
3

Ich bin mir ziemlich sicher, dass die Fehlermeldung wörtlich wahr ist: 0xa0 ist kein gültiges UTF-8-Zeichen.

Auf meinem Home-Server wird PostgreSQL unter Windows XP, SP3 ausgeführt. Ich kann dies in psql tun.

%Vor%

Ich bekomme keine Fehlermeldung, aber ich bekomme Müll für das Trennzeichen. Könnte dies ein Codepage-Problem sein?

  

Als Workaround verwende ich Leerzeichen anstelle von   G in Formatzeichenfolge

Lass uns darüber nachdenken. Wenn Sie ein Leerzeichen verwenden, wird der Wert möglicherweise auf einer Webseite am Ende einer Zeile oder an der Grenze einer Tabellenzelle aufgeteilt. Ich würde denken, dass ein non-breaking Raum eine bessere Wahl sein könnte.

Und in Unicode ist ein nichtbrechendes Leerzeichen 0xa0. In Unicode, nicht in UTF8. (Das heißt, 0xa0 kann nicht das erste Byte eines UTF8-Zeichens sein. Siehe UTF-8-Bit-Verteilung . )

Eine weitere Möglichkeit besteht darin, dass Ihr Client eine Byte-Reihenfolge erwartet und der Server eine andere Byte-Reihenfolge angibt. Da es sich bei den Zahlen um Einzelbyte-Zeichen handelt, spielt die Byte-Reihenfolge keine Rolle, solange sie nicht wichtig sind. Wenn der Client einen Big-Endian-MB-Charakter erwartet und ein kleines Endian-MB-Zeichen mit 0xa0 beginnt, würde ich erwarten, dass er mit der Fehlermeldung, die Sie gesehen haben, stirbt. Ich bin mir nicht sicher, ob ich das testen kann, bevor ich heute zur Arbeit gehe.

    
quelle

Tags und Links