2013年5月28日

[SQL] - Char(0)問題處理

最近在處理問題時遇到一個很玄的問題....欄位中含有Char(0)的特殊字元,
範例圖如下:左圖使用文字模式顯示,右圖使用表格方式顯示











這樣子的資料在網頁或者程式顯示的狀況下可能會出現錯誤,
那要如何去修正這個問題呢?
有兩個方案如下:
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',或許是因為程式抓到了結束字元,剩下的通通丟掉拿去做雞精了吧.....

沒有留言:

張貼留言