Sql server 东部字符集导致SQL Server 2012出现问题

Sql server 东部字符集导致SQL Server 2012出现问题,sql-server,non-latin,Sql Server,Non Latin,我有一张目录: internalid foreignWord 1 បរិស្ថាន 2 ការអភិវឌ្ឍសហគមន៍ 及其模式: CREATE TABLE [dbo].[CE_testTable]( [internalid] [int] IDENTITY(1,1) NOT NULL, [foreignWord] [nvarchar](50) NOT NULL 如果我跑步: SELECT TOP 1000 [internalid] ,[foreignWord]

我有一张目录:

internalid  foreignWord
1   បរិស្ថាន
2   ការអភិវឌ្ឍសហគមន៍
及其模式:

CREATE TABLE [dbo].[CE_testTable](
    [internalid] [int] IDENTITY(1,1) NOT NULL,
    [foreignWord] [nvarchar](50) NOT NULL
如果我跑步:

SELECT TOP 1000 [internalid]  ,[foreignWord] FROM CE_testTable where foreignWord = N'ការអភិវឌ្ឍសហគមន៍'
我得到:

internalid  foreignWord
1   បរិស្ថាន
2   ការអភិវឌ្ឍសហគមន៍
这两行都是,它应该只返回带有“”的行ការអភិវឌ្ឍសហគមន៍" 这就是柬埔寨的“社区发展”


这是一个NVARCHAR列,我正在选择N'等的位置?有什么想法吗?

尝试不带N的查询

SELECT [internalid],
       [foreignWord] 
FROM CE_testTable 
WHERE foreignWord = 'ការអភិវឌ្ឍសហគមន៍'

尝试不带N的查询

SELECT [internalid],
       [foreignWord] 
FROM CE_testTable 
WHERE foreignWord = 'ការអភិវឌ្ឍសហគមន៍'
将更改为
Latin1\u General\u 100\u CI\u AS

创建表时,可以为每列指定排序规则

如果不指定排序规则,则列将具有与数据库相同的排序规则

CREATE TABLE [dbo].[CE_testTable](
    [internalid] [int] IDENTITY(1,1) NOT NULL,
    [foreignWord] [nvarchar](50) collate Latin1_General_100_CI_AS NOT NULL
)

将更改为
拉丁语1\u常规\u 100\u CI\u AS

创建表时,可以为每列指定排序规则

如果不指定排序规则,则列将具有与数据库相同的排序规则

CREATE TABLE [dbo].[CE_testTable](
    [internalid] [int] IDENTITY(1,1) NOT NULL,
    [foreignWord] [nvarchar](50) collate Latin1_General_100_CI_AS NOT NULL
)

看来SQL Server无法满足我的要求


查看来自Erland Sommarskog的,这就解释了我的情况。它存储正常,我可以看到其中的行。但是比较可能失败。它们失败了。所以这是一个设计级别的问题。我不能对表进行不同的排序,所以我不能比较。对我来说,这不是一个问题,这只是一个出错的PK,我可以解决。

我觉得SQL Server无法满足我的要求


查看来自Erland Sommarskog的,这就解释了我的情况。它存储正常,我可以看到其中的行。但是比较可能失败。它们失败了。所以这是一个设计级别的问题。我不能在表中使用不同的排序规则,所以我不能比较。对我来说,这不是一个问题,这只是一个出错的PK,我可以解决。

Do这对你有用吗?我试过了,它根本不返回任何行。奇怪的是,你的查询没有为我返回任何行。如果没有N,它将返回正确的行。你的数据库排序规则是什么?SQL\u Latin1\u General\u CP1\u CI\u AS。这个数据库可能需要包含世界上任何语言的字符,而不仅仅是柬埔寨语。排序规则,正如我看到的字符字符存储在那里。肯定有其他东西。这对你有用吗?我试过了,它根本不返回任何行。奇怪的是,你的查询没有为我返回任何行。如果没有N,它将返回正确的行。你的数据库排序规则是什么?SQL\u Latin1\u General\u CP1\u CI\u AS。此数据库可能需要包含世界上任何语言的字符,而不是just柬埔寨语。排序规则,我可以看到存储在其中的字符。必须有其他内容。该表需要能够包含任何语言的字符。@bendecko
Latin1_General_100_CI_as
也可以。+1代表SQL Fiddle。很好!我的排序规则设置为“SQLCollation Latin1_General_100_CI_as”“但是在我的机器上它不工作<代码>从[CE_testTable]中选择前1000名[internalid],[foreignWord],其中foreignWord=N'បរិស្ថាន'提供了整个表。@Bendcko仅更改数据库的排序规则是不够的。您还需要重新创建已创建的任何表。将保留创建时获得的任何排序规则。该表需要能够包含来自任何语言的字符。@bendecko
Latin1\u General\u 100\u CI\u AS
也可以使用。+1表示SQL FIDLE。美好的我的排序规则设置为“SQLCollation Latin1\u General\u 100\u CI\u AS”,但在我的机器上它不工作<代码>从[CE_testTable]中选择前1000名[internalid],[foreignWord],其中foreignWord=N'បរិស្ថាន'提供了整个表。@Bendcko仅更改数据库的排序规则是不够的。您还需要重新创建已创建的任何表。他还说,在旧的排序规则(版本80)中也是如此。但是新版本(版本100)已经定义了必要的代码点。他还说旧版本(版本80)也是如此。但是新版本(版本100)定义了必要的代码点。