2

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

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

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

我正在使用PostgreSQL.

4

4 回答 4

5

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

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

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

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

于 2012-11-20T17:29:26.623 回答
1

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

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

如果你想使用它们,你必须强制转换,如果偶然存储的日期不是有效的,因为文本没有验证,这只是问题。

于 2012-11-20T17:29:13.793 回答
1

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

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

关于存储大小text:aninteger占用 4 个字节(并且需要填充以进行数据对齐)。textvarchar占用 1 个字节加上实际字符串,对于 UTF-8 中的 ASCII 字符为 1 个字节,对于特殊字符则为更多。很可能,text会更大。

于 2012-11-20T19:53:16.297 回答
1

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

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

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

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

于 2012-11-21T01:44:27.983 回答