varchar数据类型详解与⽐较
Oracle中varchar2字段最长设置4000,数据库设计如果有字段较多的则设置4000。
在oracle中有三种⽐较常⽤的类型:varchar2(byte)、varchar2(char)、nvarchar2()。
varchar2最大长度⾸先,我们要时刻记清:⽆论是varchar2还是nvarchar2,最⼤字节数都是4000。
varchar2(byte):就是默认的表⽰⽅式,⽐如我们写成:varchar2(100),就相当于varchar2(100 byte),表⽰最⼤字节数是100,该字段最多能容纳100个字节,强调空间⼤⼩。由于我们描述的是字节,因此,保存汉字等字符时,就要⼩⼼了。如果你的数据库⽤的是GBK编码,那么⼀个汉字将占⽤2个字节,最多能存50个汉字,如果你的数据库⽤的是UTF8编码,那么⼀个汉字将占⽤3个字节,最多能存33个汉字。
varchar2(char):表⽰最⼤字符数是100,该字段最多能容纳100个字符,强调个数。假设我们写成varchar2(100 char),那么⽆论是数字、字母、汉字,都看成⼀个字符,最多写100个,当然,汉字越多,占⽤的空间越⼤,同样遵循上边的数据库编码原则。例如:存⼊⼀个汉字,底层占2或3个字节,存⼊⼀个字母,占1个字节,绝对不是某些⽂章所说1个字母或数字也占2或3个字节!
nvarchar2():没有byte、char之分,类似于varchar2(char),只不过nvarchar2()屏蔽了数据库编码,⽆论是何种编码,nvarchar2()中⼀个汉字都占两个字节。
⼀般的教程,也就到这了,可是如果再多⼀步思考,会发现⼀个致命问题。
实际应⽤中,很可能会出现这种写法:varchar2(1400 char),我们主观的认为,这个字段最长不能超过1400个字符,这意味着我们可能会存⼊1399个字符,貌似很正确的样⼦。
但是,如果这1399个字符都是汉字,字符长度并没有超过1400,看起来⼀切正常,但实际上我们损失了⼀部分数据,为什么?
因为1399个汉字,按UTF8编码来说(99%的项⽬都是UTF8编码吧。。),需要占⽤1399*3=4197个字节,⽽⽂章开篇就说,⽆论是什
么char,最⼤长度就是4000字节,⼀个也不能多,因此多出来的197个字节,都会抹去,⽽整个过程中,⽆任何错误提⽰,你的数据就这样蒸发了!
所以,对于GBK编码的数据库⽽⾔,安全的写法为:varchar2(2000 char)、nvarchar2(2000),对于UTF8编码的数据库⽽⾔,安全的写法为:varchar2(1333 char)、nvarchar2(2000)。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论