我有一个数据库,它可以处理俄文文本,但是当我运行查询时,它会显示以下内容。数据库将由俄罗斯人使用,它必须正确显示俄语文本!

有什么办法解决这个问题吗?在未来,它将位于俄罗斯并与俄语版本的SQL Server一起工作,但目前我正在开发英文版本的SQL 2012 Express。
下面是table和insert语句:
Create table Employee
(
EmpID int not null IDENTITY (10, 1),
StrName nvarchar (25) not null,
Phone1 nvarchar (25) not null,
Phone2 nvarchar (25)
Primary Key (EmpID),
);
insert into Employee (LastName , FirstName,Phone1,Phone2)
values ('Иванов','111 111 11111','111 111 1111');发布于 2013-08-20 09:43:05
您确定数据已正确存储在数据库中吗?怎么又知道了?
确保该列具有正确的排序规则,并将其定义为nvarchar,并且插入的字符串文字以N为前缀。例如,它们是不同的:
INSERT dbo.table(column) SELECT 'foo';
INSERT dbo.table(column) SELECT N'foo';举个例子:
USE tempdb;
GO
CREATE TABLE dbo.foo
(
ID INT PRIMARY KEY,
bar NVARCHAR(32) COLLATE SQL_Ukrainian_CP1251_CI_AS
);
INSERT dbo.foo SELECT 1,'АБВГДЕЖЅZЗИІКЛ';
INSERT dbo.foo SELECT 2,N'АБВГДЕЖЅZЗИІКЛ';
SELECT ID, bar FROM dbo.foo;
GO
DROP TABLE dbo.foo;结果:
ID bar
---- --------------
1 ????????Z?????
2 АБВГДЕЖЅZЗИІКЛ为了显示这对insert语句的影响,您的字符串缺少N前缀:
SELECT
CONVERT(NVARCHAR(32), 'Иванов'),
CONVERT(NVARCHAR(32), N'Иванов');结果:
------ ------
?????? Иванов因此,在Unicode字符串前面加上N'a prefix',否则会丢失数据。
发布于 2013-08-20 13:41:04
虽然Aaron Bertrand很好地解释了为什么会得到这样的结果,但我想说的是,有一种方法可以不在所有字符串前加上俄文字母'N'。
据我所知,您刚刚正确地设置了服务器排序规则。因此,如果您设置了排序规则,例如,像Cyrillic_General_CI_AS一样,服务器可以正确处理带有俄文字母的varchar:
select
'español', '平成年月日', 'иван',
serverproperty('collation')结果:
espanol ????? иван Cyrillic_General_CI_AS如你所见,西班牙语和中文字符串没有被正确处理,而俄罗斯字符串被正确处理。因此,您可以将数据插入到nvarchar列中,而无需使用'N'作为字符串前缀
也就是说,我在数据库中使用nvarchar数据类型作为默认字符串,在存储过程中使用nvarchar参数。我很少在代码中使用俄语字符串(仅当我想测试某些东西时),而且我从未使用过N'string'语法。
虽然拥有正确的默认排序规则可能很方便,但此解决方案存在问题-它不容易change default collation on installed SQL Server,因此在安装SQL Server实例时必须小心,并正确选择排序规则。
https://stackoverflow.com/questions/18325680
复制相似问题