在SQL中选择西里尔字符

Ker*_*ebi 3 sql sql-server sql-server-2008

当用户插入俄语单词,例如“ ??????” 到数据库,数据库将其保存为“ ??????”。如果他们以'N'字母插入,或者我以'N'字母选择,即;exec Table_Name N'???????' 没有问题。但是我不想在每个查询中都使用'N',那么对此有什么解决方案吗?我将使用存储过程。

更新:

现在,我可以使用带有排序规则的俄语字母。但是我无法更改每种语言的排序规则,我只想了解在添加文本之后是否有任何触发器或函数可以在文本前面自动添加N。IE; 当我插入'??????'时,SQL应该将其取为N'??????' 自动地。

Aja*_*jay 7

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

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

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


Sta*_*vas 5

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

您可以通过以下方式对其进行测试:

CREATE TABLE #test
(
    varcharCol varchar(40),
    nvarcharCol nvarchar(40)
)
INSERT INTO #test VALUES (N'???????', N'???????')

SELECT * FROM #test
Run Code Online (Sandbox Code Playgroud)

输出值

varcharCol  nvarcharCol
???????     ???????
Run Code Online (Sandbox Code Playgroud)

如您所见,数据类型的列varchar返回问号??????,数据类型的列nvarchar返回俄语字符???????


更新

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

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

MORE INFO


wir*_*ext 5

它会很难把在评论我会推荐这个环节信息

declare @test TABLE 
(
    Col1 varchar(40),
    Col2 varchar(40),
    Col3 nvarchar(40),
    Col4 nvarchar(40)
)
INSERT INTO @test VALUES
('???????',N'???????','???????',N'???????')

SELECT * FROM @test
Run Code Online (Sandbox Code Playgroud)

结果

在此处输入图片说明