我们开发了一个需要以英语,波兰语,斯洛伐克语和捷克语显示文本的网站。但是,当文本输入数据库时,任何带重音的字母都会更改为英文字母。
在论坛上搜索之后,我发现可以在包含重音字符的字符串前放置一个“N”。例如:
INSERT INTO Table_Name (Col1, Col2) VALUES (N'Value1', N'Value2')
但是,该网站已经完全开发,所以在这个阶段,浏览网站中的所有INSERT和UPDATE查询将是一个非常漫长而乏味的过程。
我想知道是否有其他更快更好的方法来做我想做的事情?
数据库是MSSQL,插入的列已经是nvarchar(n)。
答案 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