Welche Zeichen sind in Spalte (nvarchar 50) von MSSQL Server 2008 erlaubt?

10196
RayofCommand

Ich habe eine Spalte in MSSQL, die nvarchar (50) ist, in der ich Passwörter für Benutzer eingebe. Ich weiß, dass beispielsweise einige Sonderzeichen wie $% zulässig sind, aber wo kann ich sehen, welche Listenzeichen zulässig sind?

0

2 Antworten auf die Frage

1
billinkc

nchar / nvarchar sind die Datentypen des UNICODE UCS-2-Zeichensatzes mit fester und flexibler Länge von SQL Server.

Die Frage lautet dann: Was zum Teufel ist UCS-2? Laut Wikipedia wird dies 1.1M-Codepunkte zulassen.

Folgendes wurde aus dem Wiki-Artikel kopiert, da ich ein dummer 'Merikan bin und aus dem Verständnis herausgeholt habe, was dies alles bedeutet.

Code-Punkte U + 0000 für U + D7FF und U + E000 für U + FFFF

Die erste Ebene (Codepunkte U + 0000 bis U + FFFF) enthält die am häufigsten verwendeten Zeichen und wird als Basic Multilingual Plane oder BMP bezeichnet. Sowohl UTF-16- als auch UCS-2-Codierpunkte codieren in diesem Bereich als einzelne 16-Bit-Codeeinheiten, die numerisch den entsprechenden Codepunkten entsprechen. Die Codepunkte im BMP sind die einzigen Codepunkte, die in UCS-2 dargestellt werden können. Innerhalb dieser Ebene sind die Codepunkte U + D800 bis U + DFFF (siehe unten) für Lead- und Trail-Surrogate reserviert.

Code zeigt U + 10000 bis U + 10FFFF

Codepunkte von den anderen Ebenen (als zusätzliche Ebenen bezeichnet) werden in UTF-16 durch Paare von 16-Bit-Codeeinheiten, die als Ersatzpaare bezeichnet werden, nach dem folgenden Schema codiert:

  • 0x010000 wird vom Codepunkt subtrahiert, wobei eine 20-Bit-Zahl im Bereich von 0..0x0FFFFF verbleibt.
  • Die obersten zehn Bits (eine Zahl im Bereich von 0..0x03FF) werden zu 0xD800 addiert, um die erste Codeeinheit oder den ersten Surrogat zu erhalten, der im Bereich 0xD800..0xDBFF liegt. (In früheren Versionen des Unicode-Standards wurden diese als hohe Ersatzzeichen bezeichnet.)
  • Die niedrigen zehn Bits (ebenfalls im Bereich von 0..0x03FF) werden zu 0xDC00 addiert, um die zweite Codeeinheit oder den Nachfolger zu ergeben, der im Bereich 0xDC00..0xDFFF liegt. (In früheren Versionen des Unicode-Standards wurden diese als geringe Ersatzzeichen bezeichnet.)

Da die Bereiche für die Lead-Surrogate, die Trail-Surrogate und die gültigen BMP-Zeichen nicht zusammenhängend sind, wird die Suche vereinfacht: Es ist nicht möglich, dass ein Teil eines Zeichens einem anderen Teil eines anderen Zeichens entspricht. Dies bedeutet auch, dass UTF-16 bei 16-Bit-Wörtern selbstsynchronisierend ist: Ob eine Codeeinheit ein Zeichen startet, kann ohne Prüfung früherer Codeeinheiten ermittelt werden. UTF-8 teilt diese Vorteile, aber viele frühere Multi-Byte-Codierschemata erlaubten keine eindeutige Suche und konnten nur durch erneutes Parsing vom Anfang des Strings aus synchronisiert werden. UTF-16 ist nicht selbstsynchronisierend, wenn ein Byte verloren geht oder der Durchlauf mit einem zufälligen Byte beginnt.

Da die am häufigsten verwendeten Zeichen alle in der mehrsprachigen Basisebene enthalten sind, wird die Handhabung von Ersatzpaaren oft nicht gründlich getestet. Dies führt zu dauerhaften Fehlern und potenziellen Sicherheitslücken, selbst in gängiger und gut überprüfter Anwendungssoftware (z. B. CVE-2008-2938, CVE-2012-2135).

1
Suing

NVARCHAR kann Unicode-Zeichen enthalten. http://msdn.microsoft.com/de-de/library/ms186939.aspx

Präfix für Unicode-Zeichenfolge-Konstanten mit dem Buchstaben N. Ohne das Präfix N wird die Zeichenfolge in die Standard-Codepage der Datenbank konvertiert. Diese Standard-Codepage erkennt möglicherweise bestimmte Zeichen nicht.

DECLARE @nv NVARCHAR(20) SET @nv = N'Minyā' SELECT @nv 

Hier ist die Liste der Unicode-Zeichen: http://en.wikipedia.org/wiki/List_of_Unicode_characters