Oracle、MySQL、PostGreSQL、SQL Server- VARCHAR与VARCHAR2

Oracle、MySQL、PostGreSQL、SQL Server- VARCHAR与VARCHAR2

Oracle 数据库中的 varchar 和 varchar2 数据类型都用于存储字母数字值的动态长度,也是最常用的字段数据类型。它们之间存在一些差异。

varchar 数据类型是适用于所有关系数据库产品(Oracle、MySQL、PostgreSQL 和等)的 ANSI 标准数据类型,存储长度不同数据库差异较大。

而 varchar2 数据类型是 Oracle 标准数据类型,仅适用于 Oracle 数据库,它最多可存储 4000 个字节, 12c后新特性已经4,000增长32,767 bytes.Oracle 7.0 引入了 varchar2 数据类型,Varchar2 不区分 NULL 和空字符串,而且永远不会。如果你依赖空字符串和 NULL 是同一个东西,你应该使用 varchar2。VARCHAR是Varchar2的同义词,当我们创建 varchar 数据类型时,Oracle 服务器会在内部自动将 varchar 数据类型转换为 varchar2 数据类型。而部分国产库是VARCHAR2是VARCHAR的同义词。

可见Oracle已经用varchar2替换了varchar, 那在国产化数据库推进过程中,大量应用从Oracle迁移,希望可以兼容oracle, 挑了2个测试一下效果怎么样。

长度上限

-- PostgreSQL
weejar=# create table test(id int,name  varchar(65536000));
错误:  类型 varchar 的长度不能超过 104857601create table test(id int,name  varchar(65536000));

-- MySQL
mysql> create table test1321(id int,name varchar(80000));
ERROR 1074 (42000): Column length too big for column 'name' (max = 16383); use BLOB or TEXT instead

-- Oracle 19.3
SQL> create table test1341(id int,name varchar(32769 byte));
create table test1341(id int,name varchar(32769 byte))
                                          *
ERROR at line 1:
ORA-00910: specified length too long for its datatype

SQL> ho oerr ora 910
00910, 00000, "specified length too long for its datatype"
// *Cause: for datatypes CHAR and RAW, the length specified was > 2000;
//         otherwise, the length specified was > 4000.
// *Action:  use a shorter length or switch to a datatype permitting a
//           longer length such as a VARCHAR2, LONG CHAR, or LONG RAW

Note:
当然长度不是判断数据库好坏的标准,会有其它类型补充。

ORACLE

SQL> create table test(id int,name varchar2(20));
Table created.

SQL> desc test
           Name                            Null?    Type
           ------------------------------- -------- ----------------------------
    1      ID                                       NUMBER(38)
    2      NAME                                     VARCHAR2(20)

SQL> create table test1(id int,name varchar(20));
Table created.

SQL> desc test1
           Name                            Null?    Type
           ------------------------------- -------- ----------------------------
    1      ID                                       NUMBER(38)
    2      NAME                                     VARCHAR2(20)

SQL> insert into test1 values(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值