sql-server - 为什么我必须设置数据库中每个文本列的最大长度?

标签 sql-server sqldatatypes

为什么每个 RDBMS 都坚持要求您告诉它文本字段的最大长度是多少...为什么它不能从放入数据库的数据中推断出此信息?

我主要使用 MS SQL Server,但我知道的所有其他数据库也要求您对数据模式设置这些任意限制。现实情况是,这对于工作来说并不是特别有帮助或友好,因为业务需求一直在变化,而且几乎每天都有一些最终用户试图在该列中放入大量文本。

任何具有 RDBMS 内部工作知识的人都知道为什么我们不从放入存储的数据中推断出限制吗?我不是在谈论猜测类型信息,而是猜测特定文本列的限制。

我的意思是,我不在数据库中的每个文本列上使用 nvarchar(max) 是有原因的。

最佳答案

因为计算机(和数据库)很愚蠢。计算机的猜测能力不太好,除非您告诉它们,否则它们无法判断某一列将用于电话号码或《 war 与和平》的副本。显然,数据库可以设计为每列都可以包含无限量的数据——或者至少在磁盘空间允许的范围内——但这将是一种非常低效的设计。为了获得效率,然后,我们进行权衡,让设计者告诉数据库我们期望在列中放入多少。据推测,可能有一个默认值,因此如果您不指定它,它只会使用它。不幸的是,从效率的角度来看,任何违约可能都不适合绝大多数人。

关于sql-server - 为什么我必须设置数据库中每个文本列的最大长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2865795/

相关文章:

java - 连接到 SQL Server 时 Android 崩溃

sql-server - 阿拉伯语姓名查询返回多个结果

php - Mysql Bigint 数据类型带空格

sql-server-2008 - MAX(text) 返回操作数数据类型 text 对于 max 运算符无效。在 SQL Server 2008 中

mysql - 更改数据库中列的数据类型

sql-server - 如何从子id中选择父id

sql - 如何找到运行乘法

sql-server - 筛选从 Web App Azure 对托管到 Azure 的 SQL Server 的访问

java - 哪个数据库实现了哪种 Java SQL 类型?

postgresql - 使用 COPY 导入超过 1,000 个格式化数字时出现问题