mysql varchar vs oracle varchar2 nvarchar2

mysql和oracle做數據同步。其中表的一個字段在mysql中設置爲varchar(6),Oracle中爲varchar2(6),但mysql中能正常存放的數據同步到oracle中卻抱ORA-12899: value too large for column錯誤。這是爲什麼呢?

mysql中varchar(6)代表可以存放6個漢字,6個字母,或6個數字。oracle中varchar2(6)代表可以中存放6個字節。即oracle中varchar2的長度代表字節數而不是字符數。mysql中一個漢字佔三個字節,Oracle中一個漢字佔兩個字節。

雖然mysql varchar 和orache varchar2中字段設置相同的長度,但oracle中卻存放不下

SQL> insert into toracle values('北京蒙迪艾爾');
insert into toracle values('北京蒙迪艾爾')
ORA-12899: value too large for column "SCOTT"."TORACLE"."NAME" (actual: 12, maximum: 6)

-- 在oracle中varchar2(6)中插入6個漢字失敗

1.varchar2把所有字符都佔兩字節處理(一般情況下),varchar只對漢字和全角等字符佔兩字節,數字,英文字符等都是一個字節;
2.VARCHAR2把空串等同於null處理,而varchar仍按照空串處理;
3.VARCHAR2字符要用幾個字節存儲,要看數據庫使用的字符集,
大部分情況下建議使用varchar2類型,可以保證更好的兼容性。

oracle varchar2與nvarchar2的區別:

VARCHAR2(size type),size最大爲4000,type可以是char也可以是byte,不標明type時默認是byte(如:name  VARCHAR2(60))。

NVARCHAR2(size),size最大值爲2000,單位是字符。

VARCHAR2最多存放4000字節的數據,最多可以可以存入4000個字母,或最多存入2000個漢字(數據庫字符集編碼是GBK時,varchar2最多能存放2000個漢字,數據庫字符集編碼是UTF-8時,那就最多隻能存放1333個漢字,呵呵,以爲最大2000個漢字的傻了吧!)

NVARCHAR2(size),size最大值爲2000,單位是字符,而且不管是漢字還是字母,每個字符的長度都是2個字節。所以nvarchar2類型的數據最多能存放2000個漢字,也最多隻能存放2000個字母。並且NVARCHAR2不受數據庫字符集的影響。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章