中国有没有一家做茶叶的网站,塑胶模具东莞网站建设,四川省建设厅证书查询,广州外发加工网转自#xff1a;http://www.cnblogs.com/iyangyuan/p/3491215.html oracle数据库相信大家都比较熟悉#xff0c;数据库中有一种非常常用的数据类型#xff1a;字符串型。 对应该类型#xff0c;在oracle中有三种比较常用的类型#xff1a;varchar2(byte)、varchar2(char)、…转自http://www.cnblogs.com/iyangyuan/p/3491215.html oracle数据库相信大家都比较熟悉数据库中有一种非常常用的数据类型字符串型。 对应该类型在oracle中有三种比较常用的类型varchar2(byte)、varchar2(char)、nvarchar2()。 那么这三种类型到底有什么区别呢 首先我们要时刻记清无论是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*34197个字节而文章开篇就说无论是什么char最大长度就是4000字节一个也不能多因此多出来的197个字节都会抹去而整个过程中无任何错误提示你的数据就这样蒸发了 所以对于GBK编码的数据库而言安全的写法为varchar2(2000 char)、nvarchar2(2000)对于UTF8编码的数据库而言安全的写法为varchar2(1333 char)、nvarchar2(2000)。 各位读者赶快检查一下你的数据库吧 小菜水平有限高手勿喷欢迎与我交流~~~转载于:https://www.cnblogs.com/bj20170624/p/8492207.html