2010-11-16 21 views
2

Nous avons développé un site qui doit afficher du texte en anglais, polonais, slovaque et tchèque. Cependant, lorsque le texte est entré dans la base de données, les lettres accentuées sont remplacées par des lettres anglaises. Après avoir cherché sur les forums, j'ai trouvé qu'il est possible de mettre un 'N' devant une chaîne contenant des caractères accentués. Par exemple:Support multilingue

INSERT INTO Table_Name (Col1, Col2) VALUES (N'Value1', N'Value2') 

Cependant, le site a déjà été pleinement développé de manière à ce stade, en passant par toutes les requêtes INSERT et UPDATE dans le site serait un processus très long et fastidieux.

Je me demandais s'il y avait une autre façon, beaucoup plus rapide, de faire ce que j'essaie de faire?

La base de données est MSSQL et les colonnes qui y sont insérées sont déjà nvarchar (n).

+1

Comment vous accédez à la base de données? (Quel type de clients?) – Stu

+1

Quelles sont les définitions de colonne? Utilisez-vous des types NVARCHAR au lieu de VARCHAR? – Oded

+0

@Stu Désolé, je ne suis pas sûr exactement ce que vous demandez. Le site est un site .NET si c'est ce que vous voulez dire? – Leah

Répondre

1

Il n'y a pas de solution rapide.

Les mises à jour et les insertions sont erronées et doivent être corrigées.

S'il s'agissait de requêtes paramétrées, vous auriez simplement vérifié qu'elles utilisaient le type de base de données NVarChar et que vous n'auriez aucun problème. Comme ce sont des chaînes dynamiques, vous devrez vous assurer d'ajouter le spécificateur Unicode (N) devant chaque champ de texte que vous insérez/mettez à jour.

+0

Merci beaucoup pour votre aide à ce sujet. J'ai essayé de modifier une de mes instructions SQL inline à une procédure stockée avec des paramètres, et je peux confirmer que l'utilisation des paramètres conserve les accents. On dirait que j'ai un travail fastidieux à venir .... – Leah

0

Sujet démarreur a écrit:

«texte en anglais, polonais, slovaque et tchèque Cependant, lorsque le texte est entré dans la base de données, les lettres accentuées sont changées en lettres anglaises » Après une recherche autour de forums, j'ai trouvé qu'il est possible de mettre un 'N' devant une chaîne qui contient des caractères accentués. Par exemple:

INSERT INTO Table_Name (Col1, Col2) VALUES (N'Value1', N'Value2') 

« Le classement pour la base de données dans son ensemble est Latin1_General_CI_AS »

Je ne vois pas comment cela pourrait se produire en raison de SQL Server depuis Latin1_General_CI_AS traite européen « non lettres -Anglais »:

--on database with collation Latin1_General_CI_AS 
declare @test_multilanguage_eu table 
(
    c1 char(12), 
    c2 nchar(12) 
) 

INSERT INTO @test_multilanguage_eu VALUES ('éÉâÂàÀëËçæà', 'éÉâÂàÀëËçæà') 

SELECT c1, cast(c1 as binary(4)) as c1bin, c2, cast(c2 as binary(4)) as c2bin 
FROM @test_multilanguage_eu 

sorties:

c1   c1bin  c2   c2bin 
------------ ---------- ------------ ---------- 
éÉâÂàÀëËçæà 0xE9C9E2C2 éÉâÂàÀëËçæà 0xE900C900 

(1 row (s) affected)

Je crois que vous avez simplement les vérifier cases Panneau de configuration -> Options régionales et linguistiques -> Onglet Avancé -> Code page tables de conversion et vérifier que vous rendez dans la même page de code que vous l'avez stockée.
La conversion en unicode des encodages utilisés par les clients conduirait à des problèmes de restitution aux clients web, me semble-t-il.

Je crois que la plupart des indicateurs de classement européens utilisent la page de codes 1252 [1], [2].

Mise à jour:
SELECT COLLATIONPROPERTY ('Latin1_General_CI_AS', 'CodePage') sorties 1252

[1]
http://msdn.microsoft.com/en-us/library/ms174596.aspx
[2]
de Windows 1252
http://msdn.microsoft.com/en-us/goglobal/cc305145.aspx