繁体   English   中英

SQL Server 和 INSERT/SELECT 查询中的汉字

[英]SQL Server and Chinese character on INSERT/SELECT query

我使用 SQL Server 2014 和排序SQL_Latin1_General_CP1_CI_AS

我有一个 C# 程序可以将汉字插入到我的数据库中,例如:

"你","好".

在 SQL Server Management Studio 中,我可以清楚地看到它,也可以通过 N"你" 搜索它。

问题是对于某些角色,它不起作用:

"〇", "㐄". 

当我的 C# 程序开始插入这两个字符时,我引发了一个 CONSTRAINT UNIQUE 异常(因为我将它放入我的数据库中的唯一中文字符约束)。

InnerException = {"违反 UNIQUE KEY 约束 'AK_Dictionary_Chinese'。无法在对象 'dbo.Dictionary' 中插入重复键。重复键值为 (㐄)。\\r\\n语句已终止。"

这是我的问题:这两个汉字(我有大约 70 个类似的问题)似乎没有很好地转换为 UTF8,我遇到了问题。 如果我删除了唯一约束,那么我当然可以将它插入到我的数据库中,并且可以通过 SQL Server Management Studio 看到它。 但是当我使用 N"〇" 搜索字符时,数据库回答我多个匹配项:"〇"、"㐄"...

那么我该如何处理呢? 我试图更改中文的排序规则,但我遇到了同样的问题......

谢谢你的帮助。

如何在我的 c# 程序中添加汉字?

我的实体对象:

public partial class Dictionary
{
    public int Id { get; set; }
    public string Chinese { get; set; }
    public string Pinyin { get; set; }
    public string English { get; set; }
}

我只是在我的数据库中添加一个新的实体对象并调用 SaveChanges();

var word1 = new Dictionary()
{
   Chinese = "〇",
   Pinyin = "a",
   English = "b",
};

var word2 = new Dictionary()
{
   Chinese = "㐄",
   Pinyin = "c",
   English = "bdsqd",
};

 // We insert it into our Db
 using (var ctx = new DBEntities())
 {
   ctx.Dictionaries.Add(word1);
   ctx.Dictionaries.Add(word2);
   ctx.SaveChanges();
 }

如果您想在家尝试,这里有一个重现问题的小型 sql 脚本。 您可以通过 SQL MANAGEMENT STUDIO 执行它:

DECLARE @T AS TABLE
(
    ID INT IDENTITY PRIMARY KEY,
    Value  NVARCHAR(256)
);  

INSERT INTO @T(Value) VALUES (N'〇'), (N'㐄');

SELECT * FROM @T;


SELECT * FROM @T WHERE Value = N'〇';

我找到了答案。 其实汉字是“繁体”的,SQL SERVER需要一点帮助。 排序规则是正确的想法,但我必须为此指定繁体中文(为了找到它,我只需查询提供所有可能排序规则的示例......)。

DECLARE @T AS TABLE
(
    ID INT IDENTITY PRIMARY KEY,
    Value  NVARCHAR(256)
) ;  

INSERT INTO @T(Value) VALUES (N'〇'), (N'㐄');

SELECT * FROM @T;

SELECT * FROM @T WHERE Value = N'㐄' COLLATE Chinese_Traditional_Pinyin_100_CI_AS;

抱歉耽误您的时间,我真的尝试过中文校对,但没有尝试过繁体(我不知道它是繁体……)。

固定的。

每次都不要指定排序规则试试这个!

DECLARE @T AS TABLE
(
    ID INT IDENTITY PRIMARY KEY,
    Value  NVARCHAR(256)
) ;  

INSERT INTO @T(Value) VALUES (N'〇'), (N'㐄'), (N'㐄〇'), (N'〇㐄');

SELECT * FROM @T;

SELECT * FROM @T  WHERE CAST(Value AS varbinary) like CAST(N'〇%' AS varbinary)
SELECT * FROM @T  WHERE CAST(Value AS varbinary) like CAST(N'㐄%' AS varbinary)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM