昨天在轉換一項資料表從 SQL1 轉換到 SQL2 ,在轉換到 SQL2 的時候中文字全變成了亂碼
雖然用的是 varchar 但並沒有使用中文難字,照常理判斷在 SQL1 正常顯示,在 SQL2 上不應出現異常
在比對後兩者 SQL資料庫的差異在於 定序,並進行了以下測試來確認
declare @var nvarchar(32) set @var = N'文字測試1234Abcd口吅品瀞' select @var 'export nvarchar(Chinese)', convert(varchar(32),@var) COLLATE Chinese_Taiwan_Stroke_CI_AS 'export varchar(Chinese)', convert(nvarchar(32),@var) COLLATE SQL_Latin1_General_CP1_CI_AS 'export nvarchar(Latin)', convert(varchar(32),@var) COLLATE SQL_Latin1_General_CP1_CI_AS 'export varchar(Latin)'
基本上在 nvarchar 函數上是沒有問題,可以看到在不同的定序上 varchar 函數在中文的顯示上會變成 問號
所以如果在開發中文系統的時候就必須注意 資料庫的定序問題。
否則就是一律採用 nvarchar 函數來使用
※若是 SQL 已經安裝完成並不想再重新安裝的話,也可針對指定資料庫來變更定序設定
參考資料: