mysql varchar2_Mysql varchar VS Oracle varchar2 | 学步园

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中却存放不下。

1.1. Mysql中新建表tmysql

CREATE TABLE tmysql (

name varchar(6) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8

1.2.插入6个汉字

insert into t values('北京蒙迪艾尔');

1.3.可以成功插入,并查询出结果

mysql> select name ,length(name)  ,char_length(name)

from tmysql;

+--------------+--------------+-------------------+

| name         | length(name) | char_length(name) |

+--------------+--------------+-------------------+

| 北京蒙迪艾尔 |           18 |                 6 |

+--------------+--------------+-------------------+

1 row in set

2.1. Oracle中新建表toracle

Oracle:

SQL> create table toracle

2  (

3    NAME VARCHAR2(6)

4  );

Table created

2.3 在oracle的varchar2(6)中同样插入6个汉字

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个汉字失败

SQL> select length('北京蒙迪艾尔') from dual;

LENGTH('北京蒙迪艾尔')

----------------------

6

SQL> insert into toracle values('蒙迪艾');

1 row inserted

SQL> select name ,length(name) from toracle;

NAME   LENGTH(NAME)

------ ------------

蒙迪艾            3

SQL> insert into toracle values('蒙迪艾尔');

insert into toracle values('蒙迪艾尔')

ORA-12899: value too large for column "SCOTT"."TORACLE"."NAME" (actual: 8, maximum: 6)

如果想让mysql varchar中存放的汉字可以在orale中varchar2中存放的下。那么oracle中设置varchar2的长度应该为mysql中varchar的1.5倍。

(因为mysql中一个汉字占三个字节,oracle中一个汉字占两个字节)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值