變數 `@name` 含中文時,`WHERE stuffname = @name` 查無結果。
字串常值預設為 **非 Unicode**(`varchar`),中文需 **Unicode**(`nvarchar`)。若欄位 `stuffname` 為 `nvarchar`/`nchar`,比較時隱性轉換可能導致索引失效或編碼不匹配。
DECLARE @name NVARCHAR(128);
SET @name = N'中國'; -- 關鍵:N 前綴表示 Unicode 字串常值
SELECT stuffname
FROM huqiangdataset.dbo.T_stainlesssteelstuff
WHERE stuffname = @name;
CREATE TABLE T1 (NAME NVARCHAR(255));
INSERT INTO T1 VALUES (N'中國'), (N'北京'), (N'上海');
DECLARE @NAME NCHAR(128);
SET @NAME = N'中國'; -- 加 N
SELECT * FROM T1 WHERE NAME = @NAME; -- 正確返回
SET @NAME = '中國'; -- 不加 N
SELECT * FROM T1 WHERE NAME = @NAME; -- 可能查無結果或掃描
DROP TABLE T1;
// C# 範例
cmd.CommandText = "SELECT * FROM T1 WHERE NAME = @name";
cmd.Parameters.AddWithValue("@name", "中文"); // 自動對應 NVarChar
`WHERE nvarchar_col = 'varchar_literal'` 會觸發**隱性轉換**,導致**索引掃描**而非索引查找,大表效能嚴重下降。加 `N` 可避免此問題。