[C# .Net] 因應資料庫Byte長度,修改中英混雜的字串長度
原始問題:VARCHAR(50 Byte) 的資料欄位,但要傳入的資料很多都超過這個長度,而且有中、英混雜。
簡單解法:
string inputText; inputBytes = System.Text.Encoding.GetEncoding("Big5").GetBytes(inputText);
string postprocessText = inputBytes.Length > 50 ? System.Text.Encoding.GetEncoding("Big5").GetString(inputBytes, 0 50) : inputText;
再用處理過的 postprocessText 傳進資料庫即可。
衍生問題:
1.中文字可能會被截斷,本例中的使用者不要求,故截斷無妨,若使用者會在意,就不能直接用 GetString() 這個方法簡單完成;有個笨方法是用 String.SubString() 一個一個字元往後延伸,不斷計算每次延伸以後的 ByteLength,若是超過就回傳上一個 SubString 當做結果,不知道有沒有更好的解法。
2.有人說用 Encoding.Default 在中文系統會有問題,建議使用 GetEncoding("Big5"),這部份我不是很確定問題發生的原因為何。
簡單解法:
string inputText; inputBytes = System.Text.Encoding.GetEncoding("Big5").GetBytes(inputText);
string postprocessText = inputBytes.Length > 50 ? System.Text.Encoding.GetEncoding("Big5").GetString(inputBytes, 0 50) : inputText;
再用處理過的 postprocessText 傳進資料庫即可。
衍生問題:
1.中文字可能會被截斷,本例中的使用者不要求,故截斷無妨,若使用者會在意,就不能直接用 GetString() 這個方法簡單完成;有個笨方法是用 String.SubString() 一個一個字元往後延伸,不斷計算每次延伸以後的 ByteLength,若是超過就回傳上一個 SubString 當做結果,不知道有沒有更好的解法。
2.有人說用 Encoding.Default 在中文系統會有問題,建議使用 GetEncoding("Big5"),這部份我不是很確定問題發生的原因為何。
留言