簡體   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