範例圖如下:左圖使用文字模式顯示,右圖使用表格方式顯示
這樣子的資料在網頁或者程式顯示的狀況下可能會出現錯誤,
那要如何去修正這個問題呢?
有兩個方案如下:
1.參考Sql Server - Remove End String Character “\0” From Data
建立如下SQL Function,原理是將非UNICODE排除掉。
CREATE FUNCTION dbo.RemoveNullChars ( @string NVARCHAR(MAX) ) RETURNS NVARCHAR(MAX) WITH RETURNS NULL ON NULL INPUT AS BEGIN DECLARE @Result NVARCHAR(MAX) SET @Result = '' DECLARE @counter INT SET @counter = 0 WHILE (@counter <= LEN(@string)) BEGIN IF UNICODE(SUBSTRING(@string,@counter,1)) <> 0 SET @Result = @Result + SUBSTRING(@string,@counter,1) SET @counter = @counter + 1 END RETURN @Result END
實際運用方式如下:
UPDATE #table SET Title= dbo.RemoveNullChars (Title)
2.使用SQL 定序的方式處理(這是經過大師指點的)SQL Server Collations
將char(0)使用定序的方法轉成binary code,再去做Replace
select REPLACE(Title COLLATE Chinese_Taiwan_Stroke_BIN2,CHAR(0),N' ') from #table
這樣子就能將資料庫中有問題的資料做更新囉!
參考出處:
1.Sql Server - Remove End String Character “\0” From Data
2.SQL Server Collations
3.談談SQL Server的定序(Collation)
後記:幾經思考,為何SQL對這個Char(0)字元會有如此的反應,聯想到以前大學學習C語言時,字元陣列的最後一個字元需為'\0',或許是因為程式抓到了結束字元,剩下的通通丟掉拿去做雞精了吧.....
沒有留言:
張貼留言