MSSQL 中 英 文版差別

最近在轉一套以前寫的系統,當然是BIG5
要改寫成目前新的 .Net 所以一定要轉 Unicode
VS2017 是一定用 Unicode 所以只要讀出檔案內容
show出來不是亂碼 基本上就是 Unicode碼

在 MSSQL(語系 中文) 上都沒啥問題

今天放上 SmaterAsp 卻發生 神奇的事.....
SmaterAsp 的 MSSQL(語系 英文)
明明看到存入欄位 Qname 資料是  "測試test"
但是用 where Qname='測試test'
就是找不到
用 SQL管理程式 連進去  SmaterAsp MSSQL key SQL指令也是找不到
***************************************************
本以為是轉碼問題 但怎麼試都試不出來
後來試到一個奇怪問題
存資料時
如果是 用   Qname=@name
cmd.Parameters.AddWithValue("@Qname", Q_Name);
中文就會寫入 OK
但是如果是用拼字串方式
Qname='"+Q_Name+"'"
填入資料庫就會變成亂碼 ?????

本以為是之前觀念錯了  .Net 字串存的不是 Unicode ...
後來查到 英文版 MSSQL 時才發現 有個特殊用法
where Qname=N'測試test'
要加 N 才會被指定是 nvarchar 不然會被轉成亂碼

對了
要存中文 unicode 欄位一定要設成 nvarchar
不然存進去也是亂碼 ....

參數盡量 用
cmd.Parameters.AddWithValue("@Qname", Q_Name);
這種給法
應該可以躲過 忘了 加  N 的神奇錯誤











留言

熱門文章