2012年7月12日 星期四

原來定序也會影響轉換函數啊!

        CAST 和 CONVERT (Transact-SQL)裡面明明提到nvarchar可以轉varchar,但我不知為什中文字卻全轉成問號,後來再另外一台SQL Server上試,結果卻正常!

        後來比較了兩邊差異,原來是定序不同造成的,以下寫了個簡單例子供各位參考(用Cast也可)

declare @var nvarchar(32)
set @var = N'傳說中的6頭牛-牛牪犇'
select @var 'nvarchar',
   convert(varchar(32),@var) COLLATE SQL_Latin1_General_CP1_CI_AS '轉成varchar(Latin定序)',
   convert(varchar(32),@var) COLLATE Chinese_Taiwan_Stroke_CI_AS '轉成varchar(Chinese定序)'



        基本上,nvarchar轉varchar,英數字不會有問題,但中文裡若是有Unicode字元的會轉成?喔


        至於我為什會需要將nvarchar轉varchar呢!因為在作SQL與DB2的轉換,DB2那邊都是varchar的囉!

0 意見:

張貼留言