为什么数据库引擎不能使用自动列数据类型?
Why can't database engines use an auto column datatype?
在数据库中定义table时,我们将列类型设置为int
/ varchar
等。
为什么不能设置为自动?
数据库将从输入中识别并自行设置类型,就像 php 处理变量一样。此外,youtube 不必让他们的统计计数器崩溃。
在某些情况下,您可以(例如 SQL 服务器的 sql_variant or Oracle's ANYDATA)。
这是否是个好主意是另一回事...
首先,没有显式模式(在数据库中)并不意味着您可以避免隐式 模式(由您的客户端应用程序所期望的暗示)。例如,仅仅因为您在数据库中有一个字符串,并不意味着您的应用程序将能够使用它,如果它最初被实现为期望一个数字。这确实是动态类型与静态类型的争论,而静态类型通常被认为对于非平凡的程序更胜一筹。
此外,这些 "variant" 类型通常有很大的开销,并且从索引和 sargability 的角度来看是有问题的。例如,2 小于 10 吗?如果这些是数字是,如果是字符串就不是!
因此,如果您知道您对数据库的期望(在 99% 的情况下您会这样做),请将其告诉数据库,以便它可以为您进行类型检查和优化!
在数据库中定义table时,我们将列类型设置为int
/ varchar
等。
为什么不能设置为自动?
数据库将从输入中识别并自行设置类型,就像 php 处理变量一样。此外,youtube 不必让他们的统计计数器崩溃。
在某些情况下,您可以(例如 SQL 服务器的 sql_variant or Oracle's ANYDATA)。
这是否是个好主意是另一回事...
首先,没有显式模式(在数据库中)并不意味着您可以避免隐式 模式(由您的客户端应用程序所期望的暗示)。例如,仅仅因为您在数据库中有一个字符串,并不意味着您的应用程序将能够使用它,如果它最初被实现为期望一个数字。这确实是动态类型与静态类型的争论,而静态类型通常被认为对于非平凡的程序更胜一筹。
此外,这些 "variant" 类型通常有很大的开销,并且从索引和 sargability 的角度来看是有问题的。例如,2 小于 10 吗?如果这些是数字是,如果是字符串就不是!
因此,如果您知道您对数据库的期望(在 99% 的情况下您会这样做),请将其告诉数据库,以便它可以为您进行类型检查和优化!