sqlserver的数据库的最大容量?

SQL Server 2 000 规范已经非常过时了。

2 000 年将设定 1 6 个示例的上限。

2 1 4 7 4 8 3 4 6 7 锁看起来很吓人,但这真的足够吗?不确定。

1 04 8 5 1 6 TB数据库大小,3 2 TB文件,3 2 TB日志,够吗?不确定。

3 2 7 6 7 个文件组,2 5 6 个文件组,听起来很多,但是实际使用起来了吗?
2 1 4 7 4 8 3 6 4 7 对象、表的数量也受此限制。

1 02 4 列、9 00字节索引键和1 6 列索引的上限是否足够?不确定。

6 5 5 3 6 倍网络包大小、2 5 6 个选表、1 02 4 个参数进行批量处理,够用吗?不确定。

不要相信2 000年的话。

sqlserver中 varchar 最大长度是多少?

说白了,MySQL的varchar(max)可以存储2 G,但实际使用却比字面值复杂得多。
这个问题由于一些严格的限制和隐藏的陷阱而变得复杂。

我们先来说说最重要的事情。
虽然 varchar(max) 的名称没有长度限制,但在现实场景中它受到三重约束。
首先,MySQL物理存储将被强制转换:超过6 5 ,5 3 5 字节(行长度上限)的varchar将被转换为文本。
去年我们跑了大表项目,一个字段设计为varchar(6 5 5 3 4 )。
结果整条线直接报了ERROR1 1 1 8 其次,编码差异直接影响可用长度:GBK每个字占用2 个字节,最多可以存储3 2 7 6 6 个; UTF8 每个字最多可以存储 3 个字节,2 1 8 4 5 是极限。
某客户使用中文版MySQL,定义varchar(3 0000)来存储GBK数据。
最终只用了2 8 000个,因为多出的2 000个字节被自动转换为文本并报警。
第三,前端处理能力是一个无形的天花板。
C++ 的默认 std::string 堆栈分配为 1 MB。
当你尝试读取超过这个容量的varchar(max)时,程序直接崩溃——很多人没有注意到这一点。

还有一点就是varchar(max)的存储方式也比较混乱。
它不像char那样预先分配固定空间,而是像text一样使用1 -2 个字节来存储长度信息,当长度超过2 5 5 时使用2 个字节。
去年我们优化了一个旧系统,把varchar(5 000)改为varchar(1 0000)。
我们发现,随着长度信息从1 字节增加到2 字节,存储空间增加了一倍。
还有一个更重要的细节:行长度限制为 6 5 ,5 3 5 字节(不包括 BLOB),因此即使 varchar(max) 本身没有长度限制,表中其他字段的总和也不能超过此数字。
电子商务表添加了 2 0 个tinyint 和 2 个int。
结果varchar(max)只能存储不到6 2 000字节,几乎导致整个表导入失败。

一开始我以为varchar(max)可以无限存储,后来发现错了。
实际的限制比我想象的要严格。
等等,还有别的事。
MySQL 5 .7 之前,varchar(max)和text是两套机制。
5 .7 之后他们统一了。
然而,一些从旧版本继承的表可能仍然存在兼容性问题。

建议先计算编码长度+其他字段长度,留出5 000字节的余量,不要真正使用2 G的限制——说实话,这相当陷阱。