2010-12-03 21 views
1

Drei Fragen mit dem folgenden Szenario:SQL Server-Datenbank mit Latin1-Codepage zeigt japanische Zeichen als "?"

  • SQL Server 2005 die Produktion db mit einem Latin1 Zeichensatz und zeigt "?" für ungültige Zeichen in Management Studio.
  • SomeCompanyApp-Client als Dienst, der die Daten von Servern und Arbeitsstationen ausfüllt.
  • SomeCompanyApp-Verwaltungskonsole, die "?" für asiatische Charaktere.

Da dies eine Prod db ist, werde ich nicht darauf schreiben.

Ich weiß nicht, ob die Client-App, die die Daten in der Datenbank speichert, sie tatsächlich korrekt als Unicode speichert, und sie wird einfach nicht angezeigt, weil sie Latin1 für die Konsole verwenden.

Q1: Wie ich es verstehe, SQL Server speichert nvarchar Text als Unicode unabhängig von der Codepage oder bin ich völlig falsch und wenn die Codepage ist Latein1 dann alles, was nicht in dieser Codepage ist wird konvertiert „?“.

Q2: Ist das bei einer Textspalte dasselbe?

Q3: Gibt es eine Möglichkeit SQL Server Management Studio oder Visual Studio und einige Codes verwenden (egal, welche Sprache :)) die DB abzufragen und mir zeigen, wenn die Zeichen wirklich als Japaner zeigen, Chinesisch, Koreanisch usw.?

Mein Ziel ist es, Daten aus der Datenbank zu extrahieren und in einer anderen Datenbank mit UTF-8 zu speichern, um japanische und andere asiatische Zeichen in meiner eigenen Client-Webanwendung anzuzeigen. Ich werde mich mit einer Antwort auf Q3 zufrieden geben. Ich kann in mehreren Sprachen programmieren und zumindest einige andere verstehen, aber ich bin einfach nicht genug über Unicode informiert. Wenn Sie wissen wollen, dass meine Webanwendung pyodbc und cassandra verwendet, ist das für diese Fragen egal.

+0

Mein Verständnis von Nvarchar ist auch auf Ihren Linien. Können Sie in Management Studio die Anweisung 'insert' direkt verwenden und japanische Zeichen in diesen Spalten speichern? –

+0

Produktion db, ich möchte nichts tun, aber davon lesen.Außerdem, da nvarchar pro vorherige Antwort die Unicode-Information speichert, hängt es davon ab, was die Anwendung, die darauf schreibt, damit macht. – Marlon

Antwort

2

Wenn in eine NVARCHAR Spalte in SSMS einfügen, müssen Sie unbedingt sicherstellen, dass Sie die Zeichenfolge mit einem N sind prefixing:

Dies wird NICHT Arbeit:

INSERT INTO dbo.MyTable(NVarcharColumn) VALUES('Some Text with Special Char') 

SQL Server interpretiere deine Zeichenkette in der VALUES(..) als VARCHAR und entferne damit beliebige Sonderzeichen.

Sie benötigen dieses:

INSERT INTO dbo.MyTable(NVarcharColumn) VALUES(N'Some Text with Special Char') 

voranstellen Ihre Textliteral mit einem N'..' SQL Server teilt dies als NVARCHAR den ganzen Weg zu behandeln.

Hilft Ihnen das bei der Lösung Ihres Q3?

+0

Es hilft mir zu verstehen, wie es funktioniert, im Grunde, dass ich in Q1 richtig dachte, dass es in Unicode speichert. Da ich keine Ahnung habe, wie der aktuelle Dienst Daten in nvarchar speichert, geht es bei Q3 eher darum zu überprüfen, was passiert ist, haben sie N '' benutzt oder einfach nach dem Enkodieren nach Latin1 extern eingefügt. Vielen Dank! – Marlon

+0

Da niemand anders geantwortet hat, werde ich es einfach so lassen, da ich dieses Projekt in den Hintergrund rücke. Ich werde dich einfach als Antwort markieren. – Marlon

Verwandte Themen