在varchar(1000)上报错字符串截断,于是改为varchar(8000)仍然报错。
通过对该条语句插入的记录进行多次修改并测试,发现“记录超长”错误不是某个字段长度超过了定义的字段类型长度,而是该条记录的所有字段的值加在一起超过了一定长度。
这个“长度”是由数据库的页大小决定的,即达梦数据库中一行记录的所有字段的实际长度的和不能超过页大小的一半
在达梦数据库中,一行记录所有字段长度累加不能大于下表:
解决方法
目前测试过的解决方法如下:
重新创建数据库,将数据库的页大小设为“16K”或以上;
达梦数据页大小在创建数据库时设置,设定之后不能更改。
将字段类型改为TEXT、CLOB、BLOB等大字段。
在数据库文件中,TEXT、CLOB、BLOB等大字段采用和普通字段不同的、特殊的存储方式,不占用该条记录的页大小。
分类: 电脑/网络 >>程序设计 >>其他编程语言问题描述:
这样一张表:
字段19个,其中 Clob 6个,varchar(2000) 10个。
数据库页面大小是默认的16K,资料上说这种情况
下,一行数据的所有字段的长度累加不能大于8000,
那该怎么建?
达梦对表中使用 Clob 类型有没有其它要求?
解析:
建表没有问题,因为VARCHAR类型不管多大都不会分配实际空间的,而如果使用CHAR的话则会分配实际的空间
在插入的数据时候,如果一行中VARCHAR那几个字段总长度加起来超过8000的话会报错
clob字段的数据是另外存储的,使用没有什么特别的要求,用法是clob(长度),最大长度为2G-1字节,定义长度指明了在clob字段中可以接受的最大字节长度.如不定义长度,缺省为2G-1
最大长度8000,用max可以存储达到2G。
例如:
varchar [ ( n | max) ]
可变长度,非 Unicode 字符数据。n 的取值范围为 1 至 8,000。max 指示最大存储大小是 2^31-1 个字节。
在某些情况下,前台应用对过长的字串是无法正确处理的,比如一些表格控制,比如C++定义的字符串变量。
扩展资料:注意事项
存储限制
varchar 字段是将实际内容单独存储在聚簇索引之外,内容开头用1到2个字节表示实际长度(长度超过255时需要2个字节),因此最大长度不能超过65535。
1、编码长度限制
字符类型若为gbk,每个字符最多占2个字节,最大长度不能超过32766
字符类型若为utf8,每个字符最多占3个字节,最大长度不能超过21845。
若定义的时候超过上述限制,则varchar字段会被强行转为text类型,并产生warning。
2、行长度限制
导致实际应用中varchar长度限制的是一个行定义的长度。 MySQL要求一个行的定义长度不能超过65535。若定义的表长度超过这个值,则提示
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOBs。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)