2 Stimmen

Sql Server String-Vergleichsproblem mit chinesischem Leerzeichen

Ich habe einen Datensatz in meiner Sql-Server-Datenbank mit dem folgenden Wert für eine nvarchar-Spalte: ' ' Das zweite Zeichen ist der Unicode-Wert 0x20, der ein einfaches Leerzeichen ist.

Es gibt eine eindeutige Schlüsselbeschränkung für diese Spalte.

Ich erhalte eine Verletzung des eindeutigen Schlüssels, wenn ich versuche, den folgenden Wert einzufügen: '' In dieser Zeichenfolge ist das zweite Zeichen der Unicode-Wert 0x3000, der ein chinesisches Leerzeichen ist.

Warum wird der eindeutige Schlüssel verletzt? Warum "konvertiert" der Sql-Server das chinesische Leerzeichen in ein einfaches Leerzeichen?

Vielen Dank im Voraus für alle Erkenntnisse! Meine Sortierung ist übrigens SQL_Latin1_General_CP1_CI_AS.

1voto

SQLpro Punkte 11

Erstens können Sie in SQL den entsprechenden Stringtyp einschließlich der Sortierung verwenden. Zweitens können Sie UNICODE-Strings verwenden, die mit dem Präfix N beginnen.

Beispiel:

SELECT CAST(N' ' COLLATE Chinese_Simplified_Pinyin_100_BIN2 AS VARBINARY(32)) 

\=> 0x427A20004257

SELECT CAST(N'' COLLATE Chinese_Simplified_Pinyin_100_BIN2 AS VARBINARY(32))

\=> 0x427A00304257

0voto

p.campbell Punkte 94960

Es könnte sein, dass Ihre Zusammenstellung Breitenunempfindlich .

Bedenken Sie:

  • Ändern der Sortierung Ihrer Datenbank in eine Sortierung, die Ihren Bedürfnissen entspricht, und die breitenabhängig ist.
  • die Sortierreihenfolge für die betreffende Spalte in eine breitenabhängige Sortierreihenfolge ändern. Dies könnte/wird zu mehr COLLATE-Klauseln in Ihren gespeicherten Prozessen usw. Ich bin nicht sicher, ob dies eine von DBAs empfohlene Praxis ist.

alt text

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X