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

标签 c# sql-server database

我使用带有排序规则 SQL_Latin1_General_CP1_CI_AS 的 SQL Server 2014。

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

"你","好".

在SQL Server Management Studio里我看的一清二楚,还可以通过N“你”搜索。

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

"〇", "㐄". 

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

InnerException = {"Violation of UNIQUE KEY constraint 'AK_Dictionary_Chinese'. Cannot insert duplicate key in object 'dbo.Dictionary'. The duplicate key value is (㐄).\r\nThe statement has been terminated."

这是我的问题:这两个汉字(我有大约 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;

对不起让你耽误了时间,我真的试过用中文排序,但不是繁体(我不知道这是繁体字......)。

已修复。

关于c# - INSERT/SELECT 查询中的 SQL Server 和汉字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35981876/

相关文章:

c# - 在 C# 中取消多个任务的正确方法是什么

c# - Task Scheduler Managed Wrapper 不显示所有任务

c# - 如何更改图表列 C# 中的图例文本?

sql-server - 如何查询 SQL Server 备份文件

database - 使用加权 tsvector 进行 PostgreSQL 全文搜索的最佳索引

php - 一个MySQL数据库和多个表

c# - 我什么时候应该使用 List 与 LinkedList

sql - sql中具有多列的数据透视表?

sql - 使用不同条件从同一个表进行一个 SQL 查询中的多个聚合函数

database - 如何在(Neo4j)图形数据库中表达继承?