2014年8月25日 星期一

SQL 中文字轉換 varchar 函數變成問號、亂碼

昨天在轉換一項資料表從 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)'



2014-08-25_111511

 

 

基本上在 nvarchar 函數上是沒有問題,可以看到在不同的定序上 varchar 函數在中文的顯示上會變成 問號

 

所以如果在開發中文系統的時候就必須注意 資料庫的定序問題。

 

否則就是一律採用 nvarchar 函數來使用

 

 

 

※若是 SQL 已經安裝完成並不想再重新安裝的話,也可針對指定資料庫來變更定序設定

設定或變更資料庫定序

 

 

 

參考資料:

CAST 和 CONVERT (Transact-SQL)

Orignal From: SQL 中文字轉換 varchar 函數變成問號、亂碼

沒有留言:

張貼留言