前沒多久,同事透過mail 爬蟲方式將內容寫入資料庫作為判讀,
但在透過T-SQL裡Trim函數進行去空白時遇到一些問題,無法將空白去除,
在此紀錄一下解法。
事實上問題的本質是出在各類型型別的資料,
針對相關內容我們先產生一些不同型別的字元資料。
CREATE TABLE [TextC]
(
[T1] [nvarchar](2) NULL,
[T2] [varchar](2) NULL,
[T3] [nchar](2) NULL,
[T4] [char](2) NULL,
)
insert into TextC(T1, T2, T3, T4)
values('A', 'A', 'A', 'A')
insert into TextC(T1, T2, T3, T4)
values('AB', 'AB', 'AB', 'AB')
insert into TextC(T1, T2, T3, T4)
values (CHAR(65), CHAR(66), CHAR(67), CHAR(68))
觀看一下實際上資料
SELECT
[T1], [T2], [T3], [T4]
FROM [TextC]

以字串長度去分析
SELECT
LEN([T1]) as T1, LEN([T2]) as T2, LEN([T3]) as T3, LEN([T4]) as T4
FROM [TextC]

以資料長度去分析
SELECT
Datalength([T1]) as T1, Datalength([T2]) as T2, Datalength([T3])as T3, Datalength([T4])as T4
FROM [TextC]
看的出來實際上unicode有很大的差異
我們再將資料轉成Binary看看
SELECT
CONVERT(binary(4),[T1]) as T1, CONVERT(binary(4),[T2]) as T2, CONVERT(binary(4),[T3]) as T3, CONVERT(binary(4),[T4]) as T4
FROM [TextC]

同事所遇到的是去除空白字元,
實際上因為Trim對於unicode或其他非可視的字元無效,
於MSDN上也有提到,
https://msdn.microsoft.com/en-us/library/ee634558(v=sql.120).aspx
當下是使用Replace將他資料裡的 char(13) char(10)取代掉,在這裡做個紀錄。