在SQL中选择西里尔字符

时间:2015-09-02 10:39:23

标签: sql sql-server sql-server-2008

当用户将“пример”等俄语单词插入数据库时​​,数据库将其保存为“??????”。如果他们插入'N'字母或我选择'N'字母,即; exec Table_NameN'иытание'没有问题。但我不想在每个查询中使用'N',那么有什么解决方案吗?顺便说一句,我会使用存储过程。

更新

现在我可以使用带有alter collat​​ion的俄语字母。但我不能改变每种语言的校对,我只想学习是否有任何触发器或函数在文本添加后自动添加N在文本前面。 IE浏览器;当我插入'пример'时,SQL应该像N'пример一样自动地使用它。

4 个答案:

答案 0 :(得分:4)

您必须使用列的数据类型NVARCHAR来插入unicode字母,插入时也必须使用N'value'

您可以按照以下方式进行测试:

CREATE TABLE #test
(
    varcharCol varchar(40),
    nvarcharCol nvarchar(40)
)
INSERT INTO #test VALUES (N'иытание', N'иытание')

SELECT * FROM #test

<强>输出

varcharCol  nvarcharCol
???????     иытание

当您看到返回问号varchar的数据类型??????列和返回俄语字符nvarchar的数据类型иытание列时。

<强>更新

问题是您的数据库排序规则不支持俄语字母。

  1. 在对象资源管理器中,连接到SQL Server数据库引擎的实例,展开该实例,然后展开“数据库”。
  2. 右键单击所需的数据库,然后单击“属性”。
  3. 单击“选项”页面,然后从“排序规则”中选择排序规则 下拉列表。
  4. 完成后,单击“确定”。
  5. MORE INFO

答案 1 :(得分:4)

要在数据库中存储和选择 Unicode 字符,您必须使用 NVARCHAR 而不是 VARCHAR 。要插入Unicode数据,您必须使用 N

请参阅此链接https://technet.microsoft.com/en-us/library/ms191200%28v=sql.105%29.aspx

  

这些数据类型的n前缀来自国家(Unicode)数据类型的ISO标准。

答案 2 :(得分:4)

很难发表评论我会推荐此链接Info

declare @test TABLE 
(
    Col1 varchar(40),
    Col2 varchar(40),
    Col3 nvarchar(40),
    Col4 nvarchar(40)
)
INSERT INTO @test VALUES
('иытание',N'иытание','иытание',N'иытание')

SELECT * FROM @test

<强> RESULT

enter image description here

答案 3 :(得分:0)

将列的类型(包含俄语)从varchar更改为nvarchar。