如果列设置可以为空,需要额外占用 1 字符表示是否为空。
还需要占用 1~2 字节来表示长度(如果声明长度超过 255,则占用 2 字节,否则 1 字节)
所以真正可以存储数据的长度为 65535bit - 2Bit - 1bit = 65518bit
在使用 utf8 字符集时,每个字符可能占用 3 个字节,varchar 最大长度为 21845 个字符左右(因为65518 / 3 = 21839)。
若字符集是 utf8mb4,每个字符可能占用 4 个字节,所以最大长度会进一步减少到 16383 个字符左右(65535 / 4 ≈ 16379)。
需要注意的是,对于 innodb 表,主键和外键列最大长度为 3072 字节
如果表编码是 utf8,存在列 name varchar(1),那么该列就可以存一个中文字符
在 oracle 中
varchar2(50 char)表示最多 50 字符
UTF8/GBK 一个中文占一个字符,所以最多能存 50 个汉字
varchar2(50)、varchar2(50 byte) 表示最多 50 个字节
UTF8 一个中文占 3 个字节,所以最多能存 16 个汉字
GBK 一个中文占 2 个字节,所以最多能存 25 个汉字
VARCHAR2 支持的最大长度为 4000 字节或 4000 字符,如下
create table test (
name1 varchar2(4000),
name2 varchar2(4000 char)
)// 查询数据库编码格式
select * from v$nls_parameters where parameter = 'NLS_CHARACTERSET';
select userenv('language') from dual;
// 查看指定字符占用长度
select lengthb('啊') from dual;varchar 和 varchar2 的区别存储空间
在 Oracle 7 及以下版本中,VARCHAR 类型的长度是固定的,如果存储的数据长度小于定义的长度,那么它将会在右侧填充空格。而在 Oracle 8 及以上版本中,VARCHAR 类型的长度可以动态变化,与 VARCHAR2 相同。
默认长度
在 Oracle 7 及以下版本中,VARCHAR 类型的默认长度为 1,而在 Oracle 8 及以上版本中,VARCHAR 类型的默认长度为 4000。VARCHAR2 类型的默认长度为 1。VARCHAR2 支持的最大长度比 VARCHAR 长(Oracle 12 版本之前为 4000 个字节,12 版本之后为 32767 字节);
是否允许空值
VARCHAR 对空串不处理(也就说字段没有值,可能是空字符串也可能是空值),VARCHAR2 将空串当做 NULL 来处理;
在 PostgreSQL 中,VARCHAR 类型的最大长度是 10485760 字节(即 10 MB)。但是,需要注意的是,实际可用的最大长度取决于数据库的配置和硬件限制。此外,为了确保性能和可靠性,建议将 VARCHAR 类型的长度限制在实际需要的范围内。
pg 在建表时可以不指定 varchar 列的长度,不指定长度即可用最大长度存储(10 M),如下:
create table test (
name1 varchar(255),
name2 varchar,
name3 varchar(10485760)
)CHAR:最大长度为255
VARCHAR:最大长度为4000
LONGVARCHAR:用于保存变长的字符串数据,最大长度为4321700
GRAPHICS:用于存储双字节字符串
VARGRAPHICS:用于存储可变长的双字节字符串
CLOB:最大长度为2G
这里 varchar 的长度是字节,也就是说,最大支持 4000 字节,db2 中 UTF-8 一个中文就要占 3 个字节,GBK 一个中文占 2 字节
VARCHAR2 数据类型的实际最大长度由数据库页面大小决定,在建库时指定,之后无法修改。具体最大长度算法如下表所示:
在建表时可以不指定 varchar2 类型长度,不指定则为最大长度,如下:
create table test (
name varchar2(8188),
name1 varchar2
)
数据库底层为 pg,同 pg,最大 10485761,可以不设置,不设置就是最大
create table test (
name varchar(100)
name1 varchar
);
神通数据库创建 varchar2 类型的列,其实真实还是 varchar 类型,只是为了支持这种语法,如下:
create table test (
name varchar(4000),
name1 varchar2(4000)
)
同样的 varchar(100 char) 也只是支持该语法,类型长度代表最大字符数
所以神通数据库 varchar 最大支持 8000 字符,可以不指定长度,默认最大长度为1,如:
create table test (
name varchar,
name1 varchar2(4000)
)
最大支持 255 字节,插入时如果字符串的长度大于设定的长度,不会报错,会插入一个空串

类型后面可以不跟长度,默认 1 字节,如下:
create table test (
name varchar(255),
name1 varchar
)
UTF8 字符集,最长 10922 字符
UTF8MB4 字符集,最长 8191 字符
varchar 的最大长度和数据库的配置有关,可以用 max 来代替设定最大长度,如果不设定长度,默认为 1,如下:
create table test(
name varchar,
name1 varchar(max)
)
如果设定的长度超过最大长度,长度会变成 0
同 pg
最大 8000 字节,可以不设定长度,默认为 1 字节