Der Standardzeichensatz für eine Datenbank, wenn bei der Erstellung kein Zeichensatz angegeben wurde, ist der Zeichensatz NONE
, siehe Seite 47 des Interbase 6.0 Data Definition Guide (verfügbar in der documentation section der Firebird-Website). Dies war seit Firebird (wahrscheinlich seit der Erstellung von Interbase) der Fall und gilt immer noch für die bestehenden Versionen. Wenn jedoch unter Firebird 2.5 eine Datenbank ohne Standardzeichensatz erstellt wird, hat RDB$CHARACTER_SET_NAME
den Wert NONE
. Ich bin mir nicht sicher, ob das in früheren Versionen anders war, meine Annahme wäre immer noch NONE
als Standard, selbst wenn es NULL
meldet.
Wenn Sie sicher sein wollen, können Sie einfach eine einfache Tabelle mit einem ohne Zeichensatz-Spezifikation CHAR
oder VARCHAR
Spalte erstellen, und verwenden Sie dann die folgende Abfrage den Standard zu bestimmen:
SELECT a.RDB$FIELD_NAME, a.RDB$RELATION_NAME,
b.RDB$CHARACTER_SET_ID, c.RDB$CHARACTER_SET_NAME
FROM RDB$RELATION_FIELDS a
INNER JOIN RDB$FIELDS b
ON b.RDB$FIELD_NAME = a.RDB$FIELD_SOURCE
INNER JOIN RDB$CHARACTER_SETS c
ON c.RDB$CHARACTER_SET_ID = b.RDB$CHARACTER_SET_ID
WHERE RDB$RELATION_NAME = 'TABLE_NAME'
Sie können Verwenden Sie dies, um den Zeichensatz eines beliebigen Feldes ((VAR)CHAR
) BTW zu finden.
Zeichensatz NONE
bedeutet, dass keine Zeichensatzannahmen vorhanden sind, sodass Sie Daten in jedem Zeichensatz speichern können. Sie können jedoch nicht speichern oder vergleichen Sie es mit einer Spalte, die einen expliziten Zeichensatz (außer vielleicht Zeichensatz OCTETS
, nicht sicher darüber). Wenn Sie NONE
verwenden, müssen Sie sicherstellen, dass Sie immer denselben Verbindungszeichensatz verwenden, wenn Sie eine Verbindung zur Datenbank herstellen, oder wenn Sie den Zeichensatz NONE
als Verbindungszeichensatz verwenden Sprache verwendet immer die gleiche Kodierung, sonst werden Sie Transliterationsprobleme (Zeichencodierungsprobleme) bekommen.
Die Verwendung von NONE
als Verbindungszeichensatz hat zusätzliche Probleme. Zum Beispiel werden die Daten einer Spalte immer unverändert gesendet und als empfangen gespeichert, außer wenn eine Byte-Kombination im Zeichensatz der Spalte nicht erlaubt ist. Grundsätzlich bedeutet dies, dass die Datenbank in derselben Sprache verwendet werden muss, in der sie erstellt wurde.
Im Allgemeinen ist es besser, den Standardzeichensatz explizit anzugeben, es sei denn, Sie wissen, was Sie tun.