数据库 varchar 最大长度

汇总

数据库最大长度是否可以不设置长度不设长度时默认最大长度
MySQL65535字节
设置值与编码有关
如果是utf8mb4,最大为65535/4
如果是utf8mb4,最大为65535/3
如果是gbk,最大为65535/2
-
Oracle4000字节或者4000字符(varchar2(4000 char)-
DB24000字节-
PostgreSQL10485760 字节(即 10 MB)10485760 字节(即 10 MB)
DM(达梦)与数据库分页有关
4K -> 1900
8K -> 3900
16K -> 8000
32k -> 8188
当前数据库分页支持的最大值,如当前数据库分页是32K,则为8188
KingBaseES10485760 字节(即 10 MB)10485760 字节(即 10 MB)
Oscar(神通)8000 字符1 字符
Informix255 字节1 字节
Gbase 8aUTF8,10922 字符
UTF8MB4,8191 字符
-
caché / IRIS由数据库配置1 字符
Greenplum10485760 字节(即 10 MB)10485760 字节(即 10 MB)
SQLServer8000 字节1 字节

数据库不同逻辑

MySQL

在使用 utf8 字符集时,每个字符可能占用 3 个字节,varchar 最大长度为 21845 个字符左右(因为65535 / 3 = 21845)。

若字符集是 utf8mb4,每个字符可能占用 4 个字节,所以最大长度会进一步减少到 16383 个字符左右(65535 / 4 ≈ 16383)。

需要注意的是,对于 innodb 表,主键和外键列最大长度为 3072 字节

如果表编码是 utf8,存在列 name varchar(1),那么该列就可以存一个中文字符

Oracle

在 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;
varcharvarchar2 的区别
  1. 存储空间

在 Oracle 7 及以下版本中,VARCHAR 类型的长度是固定的,如果存储的数据长度小于定义的长度,那么它将会在右侧填充空格。而在 Oracle 8 及以上版本中,VARCHAR 类型的长度可以动态变化,与 VARCHAR2 相同。

  1. 默认长度

在 Oracle 7 及以下版本中,VARCHAR 类型的默认长度为 1,而在 Oracle 8 及以上版本中,VARCHAR 类型的默认长度为 4000。VARCHAR2 类型的默认长度为 1。VARCHAR2 支持的最大长度比 VARCHAR 长(Oracle 12 版本之前为 4000 个字节,12 版本之后为 32767 字节);

  1. 是否允许空值

VARCHAR 对空串不处理(也就说字段没有值,可能是空字符串也可能是空值),VARCHAR2 将空串当做 NULL 来处理;

PostgreSQL

在 PostgreSQL 中,VARCHAR 类型的最大长度是 10485760 字节(即 10 MB)。但是,需要注意的是,实际可用的最大长度取决于数据库的配置和硬件限制。此外,为了确保性能和可靠性,建议将 VARCHAR 类型的长度限制在实际需要的范围内。

pg 在建表时可以不指定 varchar 列的长度,不指定长度即可用最大长度存储(10 M),如下:

create table test (
  name1 varchar(255),
  name2 varchar,
  name3 varchar(10485760)
)

DB2

  • CHAR:最大长度为 255
  • VARCHAR:最大长度为 4000
  • LONGVARCHAR:用于保存变长的字符串数据,最大长度为 4321700
  • GRAPHICS:用于存储双字节字符串
  • VARGRAPHICS:用于存储可变长的双字节字符串
  • CLOB:最大长度为 2G

这里 varchar 的长度是字节,也就是说,最大支持 4000 字节,db2 中 UTF-8 一个中文就要占 3 个字节,GBK 一个中文占 2 字节

DM(达梦)

VARCHAR2 数据类型的实际最大长度由数据库页面大小决定,在建库时指定,之后无法修改。具体最大长度算法如下表所示:

数据页大小varchar2 最大长度
4K1900
8K3900
16K8000
32K8188

在建表时可以不指定 varchar2 类型长度,不指定则为最大长度,如下:

create table test (
  name varchar2(8188),
  name1 varchar2
)

KingBaseES

同 pg,最大 10485761,可以不设置,不设置就是最大

create table test (
    name varchar(100)
    name1 varchar
);

Oscar(神通)

神通数据库创建 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)
)

Informix

最大支持 255 字节,插入时如果字符串的长度大于设定的长度,不会报错,会插入一个空串

类型后面可以不跟长度,默认 1 字节,如下:

create table test (
  name varchar(255),
  name1 varchar
)

Gbase 8a

UTF8 字符集,最长 10922 字符

UTF8MB4 字符集,最长 8191 字符

caché / IRIS

varchar 的最大长度和数据库的配置有关,可以用 max 来代替设定最大长度,如果不设定长度,默认为1,如下:

create table test(
  name varchar,
  name1 varchar(max)
)

如果设定的长度超过最大长度,长度会变成 0

Greenplum

同 pg

SQLServer

最大 8000 字节,可以不设定长度,默认为 1 字节

### 解决 PP-OCRv4 出现的错误 当遇到 `WARNING: The pretrained params backbone.blocks2.0.dw_conv.lab.scale not in model` 这样的警告时,这通常意味着预训练模型中的某些参数未能匹配到当前配置下的模型结构中[^2]。 对于此问题的一个有效解决方案是采用特定配置文件来适配预训练权重。具体操作方法如下: 通过指定配置文件 `ch_PP-OCRv4_det_student.yml` 并利用已有的最佳精度预训练模型 (`best_accuracy`) 来启动训练过程可以绕过上述不兼容的问题。执行命令如下所示: ```bash python3 tools/train.py -c configs/det/ch_PP-OCRv4/ch_PP-OCRv4_det_student.yml ``` 该方案不仅解决了参数缺失带来的警告,还能够继续基于高质量的预训练成果进行微调,从而提升最终检测效果。 关于蒸馏的概念,在机器学习领域内指的是将大型复杂网络(teacher 模型)的知识迁移到小型简单网络(student 模型)。这里 student 和 teacher 的关系是指两个不同规模或架构的神经网络之间的指导与被指导的关系;其中 teacher 已经经过充分训练并具有良好的性能,而 student 则试图模仿前者的行为模式以达到相似的效果但保持更高效的计算特性。 至于提到的 `Traceback` 错误信息部分,由于未提供具体的跟踪堆栈详情,难以给出针对性建议。不过一般而言,这报错往往涉及代码逻辑错误或是环境配置不当等问题。为了更好地帮助定位和解决问题,推荐记录完整的异常日志,并仔细检查最近修改过的代码片段以及确认依赖库版本的一致性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值