對於中文版的SQL SERVER,默認安裝后使用的默認排序規則為Chinese_PRC_CI_AS,在此排序規則下,使用varchar類型來可以“正常存取”存放中文字符以及一些東南亞國家的字符,
同時varchar類型在存放英文字符和數字時比nvarchar節省一半的存儲空間,因此很多DBA都習慣使用varchar類型來存放字符數據,但這樣便存在一些亂碼隱患!
首先是特殊字符如上下標或版權字符,測試Code如下:
CREATE TABLE [dbo].[Chars]( [Id] [int] IDENTITY(1,1) primary Key NOT NULL, [Char1] [nvarchar](60) NULL, [Char2] [varchar](60) NULL ) GO
1、加N插入數據:
--加N 情況 INSERT INTO [Chars](Char1,Char2) SELECT N'M²',N'M²'
2、查詢結果
3、不加N插入數據
--不加N情況 INSERT INTO [Chars](Char1,Char2) SELECT 'M²','M²'
4、查詢結果