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

时间:2013-11-22 08:31:52

标签: 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] FROM CE_testTable where foreignWord = N'ការអភិវឌ្ឍសហគមន៍'

我明白了:

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

哪一行都是行,它应该只返回带有“ការអភិវឌ្ឍសហគមន៍”的行,这是柬埔寨的“社区发展”。

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

3 个答案:

答案 0 :(得分:1)

collation更改为Latin1_General_100_CI_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 Fiddle

答案 1 :(得分:0)

尝试不带N

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

答案 2 :(得分:0)

我觉得SQL Server不能做我要求的事情。

看看Erland Sommarskog的comment,这解释了我的情况。它存储好,我可以看到那里的行。但比较可能会失败。他们做到了。所以它是一个设计水平的问题。我不能在桌子上有不同的排序,所以我无法比较。对我来说,这不是一个问题,它只是一个错误的PK,我可以解决。