如果我使用 TEXT 数据类型来存储数字,则会产生任何不良影响



如果我使用TEXT数据类型在数据库中存储 ID 号,有什么不好的影响吗?我做这样的事情:

CREATE TABLE GenData ( EmpName TEXT NOT NULL, ID TEXT PRIMARY KEY);

实际上,如果我想存储日期值,我通常使用数据类型TEXT。如果这是一种错误的方式,它的缺点是什么?

我正在使用PostgreSQL.

文本列中存储数字是一个非常糟糕的主意。当你这样做时,你会失去很多优势:

  • 您无法阻止存储无效号码(例如"foo")
  • 排序不会按您想要的方式工作("10"比"2"小")
  • 它使查看数据模型的每个人都感到困惑。

我想存储一个我通常使用的日期值 TEXT

这是另一个非常糟糕的主意。主要是因为您不应该在文本列中存储数字的原因相同。除了完全错误的日期("foo")之外,您也无法阻止"无效"日期(例如 2 月 31 日)。然后是排序的事情,以及与><的比较,以及日期算术......

我真的不建议使用文本作为日期。

用文本查看您缺少的所有功能

如果要使用它们,则必须进行投射,并且只有在意外存储的日期无效的情况下才会出现问题,因为文本没有验证。

除了其他答案已经提供的内容:

text还受到COLLATION和编码的影响,这可能会使平台之间的可移植性和数据交换复杂化。它还会减慢排序操作的速度。

关于text的存储大小:一个integer占用4个字节(并且需要填充数据对齐)。 textvarchar占用 1 个字节加上实际字符串,对于 UTF-8 格式的 ASCII 字符,则为 1 个字节,对于特殊字符,则占用更多字节。最有可能的是,text会更大。

这取决于您要对数据执行的操作。

如果您要对数值数据进行大量算术运算,将其存储为某种数值数据类型更有意义。此外,如果您计划按数字顺序对数据进行排序,则数据存储为数字确实会有所帮助。

当存储为文本时,"11"位于"9"之前,因为"1"位于"9"之前。 如果这不是您想要的,请不要使用文本。

另一方面,将数字字符串(例如邮政编码或社会保险号或电话号码)存储为文本通常是有意义的。

相关内容

最新更新