Frage

Wie können Sie den MSSQL -Server dazu bringen, Unicode -Daten standardmäßig in eine Varchar- oder Nvarchar -Spalte zu akzeptieren?

Ich weiß, dass Sie es tun können, indem Sie ein N vor die Zeichenfolge stellen, die in das Feld platziert werden soll, aber von ganz ehrlich, dies scheint 2008 ein bisschen archaisch zu sein und insbesondere mit SQL Server 2005.

War es hilfreich?

Lösung

Das N Syntax ist, wie Sie einen Unicode -String -Literal in SQL Server angeben.

N'Unicode string'
'ANSI string'

SQL Server konvertieren nach Möglichkeit automatisch zwischen den beiden, wobei entweder die Kollation einer Spalte oder die Kollation der Datenbank verwendet wird.

Wenn Ihre String -Literale also keine Unicode -Zeichen enthalten, müssen Sie die nicht angeben N Präfix.

Aber wenn Ihre String -Literale tun enthalten Unicode -Zeichen und verwenden dann die N Präfix ist notwendig.

Andere Tipps

Wenn dies eine Webanwendung ist, können Sie Ihren Webserver wahrscheinlich dazu bringen, UTF8 zu verwenden, da es sich um eine Standardcodierung handelt. Auf diese Weise wären alle Daten in den Browser UTF8 und können in Varchar -Felder eingefügt werden. UTF8 ist eine gute Möglichkeit, Anwendungen zu erstellen, die sich des Unicode nicht bewusst sind.

Sie brauchen wirklich eine Möglichkeit, das Bedürfnis nach dem N '' Präfix auszuschalten. Das Argument "Es ist für die Abwärtskompatibilität benötigt" ist für mich keinen Sinn - sicher, machen Sie das Verhalten für alte Apps zum Standard, geben Sie mir jedoch eine Option, die Unicode -Zeichenfolgen standardmäßig einzuschalten (dh kein N '' Präfix erforderlich). Ich stelle fest, dass ich mich mit großen Bereichen meiner App anlegen muss, um mich an Unicode auf SQL Server anzupassen, wenn dies kein Problem in Oracle und PostgreSQL ist. Komm schon, Microsoft!

Während Sie einfach UTF8 -Inhalte in einem VARCHAR -Feld in MSSQL -Server speichern können, solange keine Charset -Übersetzung durchgeführt wird, sollten Sie sich darüber im Klaren sein:

  1. Kein Verwaltungs-/Berichts-/Daten-Tools außerhalb Ihrer Anwendung können Ihre nicht englischen Charaktere verstehen.

  2. Sprachspezifische Handhabung wie das Sortieren einer Liste von Namen kann in der Reihenfolge nicht für jede Sprache akzeptabel sein.

  3. Muss vorsichtig mit Datenkürzungen sein. Das Abschneiden eines Multi-Byte-UTF8-Zeichens verursacht nutzig die Datenversorgung für den beteiligten Charakter. Sie sollten die Eingabe immer ablehnen, wenn sie die Feldlänge überschreitet.

  4. Es ist möglicherweise nicht so einfach, wie Sie die charSet -Übersetzung deaktivieren können. Auch wenn Sie sie in Ihrem Client -Treiber ausschalten, kann dies in einigen Fällen weiterhin überschrieben werden Datenkorruption.

  5. Wenn Sie der Meinung sind, dass dies alles ist, müssen Sie sich Sorgen machen, dass Sie sich selbst zum Narren halten.

Zusammenfassend, während Sie versucht sind, diesen Weg zu gehen, ist es keine gute Idee. Bei Multi-Byte ist eine Codeänderung erforderlich.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top