Python 在数据库中将整数存储为字符串的缺点

Python 在数据库中将整数存储为字符串的缺点,python,mysql,database,database-design,Python,Mysql,Database,Database Design,我有我需要存储的产品的id值。现在它们都是整数,但我不确定未来的数据提供者是否会将字母或符号引入这种混合,因此我正在讨论现在是将其存储为整数还是字符串 将值保存为字符串是否存在性能或其他缺点?从存储和性能角度来看,整数更有效。但是,如果有可能引入字母字符,那么应该使用字符串。在我看来,效率和性能方面的好处可能可以忽略不计,而修改代码所需的时间可能不会太长。我不确定数据库在比较一个字符串是否大于另一个字符串方面有多好,就像比较整数一样。请尝试以下查询: SELECT * FROM my_table

我有我需要存储的产品的id值。现在它们都是整数,但我不确定未来的数据提供者是否会将字母或符号引入这种混合,因此我正在讨论现在是将其存储为整数还是字符串


将值保存为字符串是否存在性能或其他缺点?

从存储和性能角度来看,整数更有效。但是,如果有可能引入字母字符,那么应该使用字符串。在我看来,效率和性能方面的好处可能可以忽略不计,而修改代码所需的时间可能不会太长。

我不确定数据库在比较一个字符串是否大于另一个字符串方面有多好,就像比较整数一样。请尝试以下查询:

SELECT * FROM my_table WHERE integer_as_string > '100';

这真的取决于你说的是什么样的身份证。如果它是一个类似于电话号码的代码,那么实际上最好使用varchar作为id,然后使用您自己的id作为db的串行id,并用作主键。在整数没有数值的情况下,通常首选varchar

除非您真的需要整数的特性(即运算能力),否则最好将产品ID存储为字符串。您永远不需要将两个产品ID相加,或者计算一组产品ID的平均值,因此不需要实际的数字类型

将产品ID存储为字符串不太可能在性能上产生可测量的差异。虽然存储大小会略有增加,但无论如何,产品ID字符串的大小可能比数据库行其余部分中的数据小得多

如果数据提供商决定开始使用字母或符号字符,那么现在将产品ID存储为字符串将在将来为您省去很多麻烦。没有真正的缺点。

如中所述

在我的国家,邮政编码也总是4位数。但是第一个数字可以是零

如果将“0700”存储为整数,可能会遇到很多问题:

它可以被读取为八进制值 如果它被正确读取为十进制值,它将被转换为“700” 当您得到值“700”时,必须记住将零相加 如果你不加零,以后,你怎么知道“700”是“0700”,还是有人打错了“7100”? 从技术上讲,我们的邮政编码是实际的字符串,即使它总是4位数字

可以将它们存储为整数,以节省空间。但请记住,这是一个简单的DB技巧,请注意前导零

但是存储一个torrent中有多少文件呢?整数还是字符串

这显然是一个整数


如果ID以零开头,则将其存储为INTEGER

>不考虑性能。考虑意义。

ID“数字”不是数字,除非它们是用所有数字的字母表书写的

如果我有零件号12和零件号14,两者之间的区别是什么?零件号2或-2是否有意义?没有

零件号(以及任何没有测量单位的零件)不是“数字”。它们只是一串数字

例如,美国的邮政编码。电话号码。社会保险号码。这些不是数字。在我们镇上,邮政编码12345和12309的区别不是我家到市中心的距离

不要把数字和单位混为一谈,其中和和和差意味着数字串没有和或差


零件ID号正确地说是字符串。不是整数。它们永远不会是整数,因为它们没有和、差或平均值。

一个整数占用的空间比一个字符串要小得多。例如,2^32-1=4294967295。这将需要10个字节来存储,其中作为整数需要4个字节来存储。对于单个条目来说,这并不是很大的空间,但是当你从数百万开始时。。。正如许多其他帖子所暗示的,还有几个其他问题需要考虑,但这是字符串表示的一个缺点。 我去年刚刚处理了一个几乎所有ID都是字符串的数据库,有些ID只有数字,有些ID是混合的。这些是问题:

  • 严重限制ID空间。一个4字符(仅限数字)的ID可容纳10000个唯一值。4字节数字的容量超过40亿
  • 无法预测的ID空间覆盖率。一旦ID开始包含非数字,就很难预测在何处可以创建新ID而不发生冲突
  • 在某些情况下,例如编写脚本或导出时,转换和显示问题。如果ID被解释为一个数字,并且有一个前导零,则ID会被更改
  • 排序问题。你不能依赖自然秩序的帮助
  • 当然,如果你的ID用完了,或者不知道如何创建新的ID,你的应用程序就死了。我建议,如果您无法控制传入ID的格式,那么您需要创建自己的(数字)ID,并将用户提供的ID与之关联。然后,您可以确保自己的ID是可靠的、唯一的(和数字的),但提供一个用户可查看的ID,该ID可以具有用户想要的任何格式,甚至不必在整个应用程序中是唯一的。这是更多的工作,但如果你经历了我所经历的,你就会知道该走哪条路了

    阿尼尔G

  • 您将无法正确进行比较。“…其中x>500”与“.其中x>500”不同,因为“500>100000”
  • 性能方面的字符串这将是一个打击,特别是如果您使用的整数索引比字符串索引快得多的索引
  • 另一方面,这取决于你的处境。如果您打算存储电话号码或学生注册号码之类的内容,那么使用字符串是非常有意义的。

    更好地使用字符串