首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sql server 2012 express不识别俄文字母。

sql server 2012 express不识别俄文字母。
EN

Stack Overflow用户
提问于 2013-08-20 09:38:44
回答 2查看 12.7K关注 0票数 8

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

有什么办法解决这个问题吗?在未来,它将位于俄罗斯并与俄语版本的SQL Server一起工作,但目前我正在开发英文版本的SQL 2012 Express。

下面是table和insert语句:

代码语言:javascript
复制
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');
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-20 09:43:05

您确定数据已正确存储在数据库中吗?怎么又知道了?

确保该列具有正确的排序规则,并将其定义为nvarchar,并且插入的字符串文字以N为前缀。例如,它们是不同的:

代码语言:javascript
复制
INSERT dbo.table(column) SELECT 'foo';
INSERT dbo.table(column) SELECT N'foo';

举个例子:

代码语言:javascript
复制
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;

结果:

代码语言:javascript
复制
ID    bar
----  --------------
1     ????????Z?????
2     АБВГДЕЖЅZЗИІКЛ

为了显示这对insert语句的影响,您的字符串缺少N前缀:

代码语言:javascript
复制
SELECT
  CONVERT(NVARCHAR(32), 'Иванов'),
  CONVERT(NVARCHAR(32), N'Иванов');

结果:

代码语言:javascript
复制
------    ------
??????    Иванов

因此,在Unicode字符串前面加上N'a prefix',否则会丢失数据。

票数 19
EN

Stack Overflow用户

发布于 2013-08-20 13:41:04

虽然Aaron Bertrand很好地解释了为什么会得到这样的结果,但我想说的是,有一种方法可以不在所有字符串前加上俄文字母'N'

据我所知,您刚刚正确地设置了服务器排序规则。因此,如果您设置了排序规则,例如,像Cyrillic_General_CI_AS一样,服务器可以正确处理带有俄文字母的varchar:

代码语言:javascript
复制
select
    'español', '平成年月日', 'иван',
    serverproperty('collation')

结果:

代码语言:javascript
复制
espanol ?????   иван    Cyrillic_General_CI_AS

如你所见,西班牙语和中文字符串没有被正确处理,而俄罗斯字符串被正确处理。因此,您可以将数据插入到nvarchar列中,而无需使用'N'作为字符串前缀

也就是说,我在数据库中使用nvarchar数据类型作为默认字符串,在存储过程中使用nvarchar参数。我很少在代码中使用俄语字符串(仅当我想测试某些东西时),而且我从未使用过N'string'语法。

虽然拥有正确的默认排序规则可能很方便,但此解决方案存在问题-它不容易change default collation on installed SQL Server,因此在安装SQL Server实例时必须小心,并正确选择排序规则。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18325680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档