多语言支持

时间:2010-11-16 16:14:11

标签: sql-server localization diacritics

我们开发了一个需要以英语,波兰语,斯洛伐克语和捷克语显示文本的网站。但是,当文本输入数据库时​​,任何带重音的字母都会更改为英文字母。

在论坛上搜索之后,我发现可以在包含重音字符的字符串前放置一个“N”。例如:

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

但是,该网站已经完全开发,所以在这个阶段,浏览网站中的所有INSERT和UPDATE查询将是一个非常漫长而乏味的过程。

我想知道是否有其他更快更好的方法来做我想做的事情?

数据库是MSSQL,插入的列已经是nvarchar(n)。

2 个答案:

答案 0 :(得分:1)

没有任何快速解决方案。

更新和插入错误,需要修复。

如果它们是参数化查询,您可以简单地确保它们使用NVarChar数据库类型,并且您不会遇到问题。

由于它们是动态字符串,因此您需要确保在要插入/更新的每个文本字段前添加unicode说明符(N)。

答案 1 :(得分:0)

Topic-starter写道:

  

“英文,波兰文,斯洛伐克文和捷克文的文字。但是,当文本输入数据库时​​,任何重音字母都会改为英文字母”在论坛上搜索后,我发现可以放一个'N'在包含重音字符的字符串前面。例如:

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

“数据库整体的排序规则是Latin1_General_CI_AS”

由于Latin1_General_CI_AS对待欧洲的“非英语”字母,我不知道由于SQL Server会如何发生:

--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

输出:

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

(1行受影响)

我相信你只需要检查它们的复选框控制面板 - >区域和语言选项 - >选项卡高级 - >代码页转换表,并检查您在存储它的同一代码页中呈现 从我看来,从客户端使用的编码转换为unicode会导致渲染回webclients的问题。

我相信大多数欧洲校对指定人都使用代码页1252 [1],[2]。

更新:
选择     COLLATIONPROPERTY('Latin1_General_CI_AS','CodePage')  输出1252

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