2010-12-03 43 views
1

Trois questions avec le scénario suivant:La base de données SQL Server avec la page de codes Latin1 affiche les caractères japonais comme "?"

  • production SQL Server 2005 db avec une page de code Latin1 et montrant "?" pour les caractères invalides dans Management Studio.
  • Client SomeCompanyApp en tant que service qui remplit les données des serveurs et des stations de travail.
  • Console de gestion SomeCompanyApp indiquant "?" pour les caractères asiatiques.

Puisqu'il s'agit d'un prod DB, je ne vais pas écrire dessus. Je ne sais pas si l'application cliente qui stocke les données dans la base de données la stocke correctement en Unicode et qu'elle ne s'affiche tout simplement pas car elle utilise Latin1 pour la console.

Q1: Si je comprends bien, SQL Server stocke le texte nvarchar Unicode quel que soit le codepage ou suis-je complètement faux et si la page de code est Latin1 alors tout ce qui est pas dans cette page de code est converti en « ? ».

Q2: Est-ce la même chose avec une colonne de texte? Y at-il un moyen d'utiliser SQL Server Management Studio ou Visual Studio et du code (peu importe quelle langue :)) pour interroger la base de données et me montrer si les caractères apparaissent réellement en japonais, Chinois, coréen, etc.? Mon but final est d'extraire des données de la base de données et de les stocker dans une autre base de données en utilisant UTF-8 pour montrer les caractères japonais et autres caractères asiatiques comme ils sont dans ma propre application web client. Je vais me contenter d'une réponse à Q3. Je peux coder dans plusieurs langues et à tout le moins en comprendre d'autres, mais je ne suis pas assez informé sur Unicode. Dans le cas où vous voulez savoir ma webapp utilisera pyodbc et cassandra mais pour ces questions ce n'est pas grave.

+0

Ma compréhension de nvarchar est également sur vos lignes. Êtes-vous capable d'utiliser une instruction directe 'insert' dans Management Studio et de stocker des caractères japonais dans ces colonnes? –

+0

Production db, je ne veux rien faire d'autre que de lire.De plus, puisque nvarchar par réponse précédente stocke l'information unicode, cela dépend de ce que fait l'application qui écrit dessus. – Marlon

Répondre

2

Lors de l'insertion dans une colonne NVARCHAR dans SSMS, vous devez absolument sûr vous préfixer votre chaîne avec un N:

Ce sera PAS travail:

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

SQL Server interpréter votre chaîne dans le VALUES(..) comme VARCHAR et ainsi dépouiller tous les caractères spéciaux.

Vous avez besoin ce:

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

votre texte littéral Préfixer avec un N'..' dit SQL Server pour traiter cela comme NVARCHAR tout le chemin.

Cela vous aidera à résoudre votre Q3?

+0

Il m'aide à comprendre comment cela fonctionne, essentiellement que je pensais correctement au Q1 qui le stocke en Unicode. Comme je n'ai aucune idée de la façon dont le service actuel stocke des données dans nvarchar Q3 est plus sur la vérification de ce qui s'est passé, ont-ils utilisé N '' ou simplement insérer après l'encodage à Latin1 en externe. Je vous remercie! – Marlon

+0

Puisque personne d'autre n'a répondu, je vais le laisser tel quel car je mets ce projet en veilleuse. Je vais simplement vous marquer comme la réponse. – Marlon