首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

中文字符在各数据库中的占位

源于今天的一个工作。

把oracle中的几张表导到DB2中。

先在oracle上查出建表语句,把varchar2替换为varchar,把date替换为timestamp,把number替换为decimal,

建表在DB2上顺利完成,然后开始导数据。

一开始两张没问题,导到第三张的时候报错,

DB2 SQLCODE=-302, SQLSTATE=22001,

查了一下说是字段长度超过了定义的长度。

这种问题肯定是出在中文字符上,

因为建表语句中字段长度是一样的,那也就是说oracle中的varchar2(10)和DB2中的varchar(10)存的中文的长度是不一样的。

然后查了一下,这样说其实不严谨。

oracle和DB2中,一个中文字符占多少字节,和数据库的字符编码有关。

oracle中,如果字符编码是ZHS16GBK,那么一个中文占两个字节,varchar2(10)可以放五个汉字;

如果字符编码是AL32UTF8,那么一个中文占三个字节,varchar2(10)可以放三个汉字。

DB2中也是一样,如果是GBK, 每个汉字占2个字节。如果是UTF,则占用3个字节。

而mysql5.0之后的版本中,mysql将字符长度的单位统一为字符。

也就是说varchar(10)可以存10个汉字,但是放数字的话也只能放10个。

那MSsqlserver呢?

nvarchar(10)可以存10个汉字,

varchar(10)可以存5个汉字。

PostgreSQL呢?

varchar(10)可以存10个汉字。

附上最新的数据库流行度排名

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180115G0Q9SV00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券