2017-02-16 2 views
0

Ich habe ein Problem mit der Codierung von Zeichenfolgenkonstanten in Abfragen an NVARCHAR-Feld in SQL Server v12.0.2. Ich brauche nationale Zeichen (alle in derselben einzelnen Codepage, z. B. kyrillisch WIN1251) in Abfragen ohne N-Präfix.SQL Server: Codierung von Zeichenfolgenkonstanten in SQL

Ist es möglich?

Beispiel:

1. CREATE TABLE TEST (VALUE NVARCHAR(100) COLLATE Cyrillic_General_CI_AS); 
2. INSERT INTO TEST VALUES (N'привет мир'); 
3. INSERT INTO TEST VALUES ('привет мир'); 
4. SELECT * FROM TEST; 

Diese zwei Zeilen zurück:

| привет мир | 
| ?????? ??? | 

So ist der erste Einsatz richtig funktioniert, erwarte ich, dass die zweite die gleiche, weil Test.value Spalte in Cyrillic_General_CI_AS zusammengestellt zu tun. Es sieht jedoch so aus, als ob nationale Zeichen Feldvergleiche ignorieren und Codepage von woanders verwenden.

Ich weiß, dass ich in diesem Fall nicht in der Lage sein wird, Zeichen aus mehr als einer Codepage und Sprachen, die nicht 1-Byte-Codierung passt, aber das ist in Ordnung für mich. Eine andere Option besteht darin, alle Abfragen so zu modifizieren, dass das N-Präfix vor den String-Konstanten verwendet wird. Dies ist jedoch nicht möglich.

Antwort

2

Ohne den N-Präfix, die Zeichenfolge an die Standard-Codepage der Datenbank , nicht die Tabelle, in denen Sie das Einfügen umgewandelt werden (MSDN für Details)

zu Also entweder sollten Sie Datenbankkollatierung ändern Cyrillic_General_CI_AS, oder finde alle Stringkonstanten und setze N Präfix ein.

+0

Ich habe auch versucht, Datenbankcodierung auf Cyrillic_General_CI_AS zu setzen (wie in einigen Artikeln, zum Beispiel [hier] (https://support.microsoft.com/en-us/help/239530/you-must-precede-all -unicode-strings-mit-einem-Präfix-n-wenn-Sie-Deal-mit-Unicode-String-Konstanten-in-SQL-Server) angegeben, dass nationale Zeichen mit DB-Standard-Codepage beim Umcodieren, aber es nicht help – vbe

+0

@vbe Es sieht ein bisschen komisch aus.Alle meine DBs haben genau Cyrillic_General_CI_AS Sortierung, und die Auswahl einer Zeichenkettenkonstante mit cyrillic Zeichen darin und ohne N Präfix funktioniert gut.Na, Ihre letzte Option ist die Server-Standard-Sortierung zu ändern, nehme ich an –

+0

Beispielskript (funktioniert nicht!): 'CREATE DATABASE TEST COLLATE Cyrillic_General_CI_AS; CREATE TABLE TEST.dbo.TEST ( VALUE NVARCHAR (10) COLLATE Cyrillic_General_CI_AS ); INSERT INTEST.dbo.TEST VALUES ('привет мир'); SELECT * FROM TEST.dbo.TEST; ' – vbe