Ker*_*ebi 3 sql sql-server sql-server-2008
当用户插入俄语单词,例如“ ??????” 到数据库,数据库将其保存为“ ??????”。如果他们以'N'字母插入,或者我以'N'字母选择,即;exec Table_Name N'???????' 没有问题。但是我不想在每个查询中都使用'N',那么对此有什么解决方案吗?我将使用存储过程。
更新:
现在,我可以使用带有排序规则的俄语字母。但是我无法更改每种语言的排序规则,我只想了解在添加文本之后是否有任何触发器或函数可以在文本前面自动添加N。IE; 当我插入'??????'时,SQL应该将其取为N'??????' 自动地。
要在数据库中存储和选择Unicode字符,您必须使用NVARCHAR而不是VARCHAR。要插入 Unicode 数据,您必须使用N
请参阅此链接https://technet.microsoft.com/en-us/library/ms191200%28v=sql.105%29.aspx
这些数据类型的 n 前缀来自国家 (Unicode) 数据类型的 ISO 标准。
您必须使用列的数据类型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返回俄语字符???????。
更新
问题是您的数据库排序规则不支持俄语字母。
它会很难把在评论我会推荐这个环节信息
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)
结果
| 归档时间: |
|
| 查看次数: |
9571 次 |
| 最近记录: |