AdSense

網頁

2017/11/16

Oracle VARCHAR2 儲存中文(UTF-8)的長度

Oracle VARCHAR2儲存中文的話長度要設為多少?


以UTF-8來看,一個中文字占3 bytes,所以如果要儲存30個中文,則可以宣告如下。

VARCHAR2(90)  // 等同於VARHCAR2(90 byte),可存30個中文字
VARCHAR2(90 byte)  // 可存30個中文字
VARCHAR2(30 char)  // 可存30個中文字

所以如果是用VARCHAR2(90 byte),則前端表單對應的輸入欄位的maxlength就應設為30,避免因為插入的中文字長度超過上限造成ORA-12899:資料欄的值太大錯誤。


 設定為VARHAR2()

計算UTF-8字串長度的網站UTF-8 string length & byte counter

不過說了這麼多,存中文就用NVARCHAR2就好了,儲存的長度是依照字元數而不是Byte,所以就不用擔心以上問題了。



2 則留言:

Unknown 提到...

NVARCHAR2 在UTF8中,中文一樣是3Bytes 喔

Matt 提到...

謝謝樓上的補充說明

AdSense