postgresql的int4类型为什么长度可以达到10位

发布于 2022-09-07 08:47:49 字数 528 浏览 60 评论 0

两个问题:

  1. postgresql的int4类型为什么长度可以达到10位,但是属性中设定是32位
  2. postgresql的int4类型长度默认设定32位,为什么修改不了,修改后还是32位

附截图:

这是表结构中int4 的数据属性
图片描述

这是小白我意图修改为11位的操作,最终还是32位,很无语
图片描述

这是修改为10位长度的数值,保存成功
图片描述

这是小白我意图修改为11位长度的操作,提示超出范围
图片描述

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

娇妻 2022-09-14 08:47:49

用NaviCat连PG? 还有这种操作?

言归正传。看起来像是GUI工具上的一些显示内容让题主产生了误解,简单解释一下吧:

PG中int4类型对应的是SQL标准中的INTEGER类型,而且PG实现的是源生的integer类型,是定长4字节(=32位bit)。其对应的十进制取值范围是 -‭21474836478 ~ ‭2147483647‬

因此,题主截图所示的操作错误如下:

  1. 第一第二张图,题主在尝试对一个INTGEGER类型的列修改其长度:上文已述,INTEGER定长的32位二进制,因此这样的操作必然是徒劳的。

    不过GUI也有值得吐槽的地方,其“长度”概念似乎有二义性

  2. 第三第四张图,题主分别尝试向INTEGER类型的字段插入一个 INTEGER范围内的值和一个INTEGER范围外的值。因此第二次尝试是失败的(第二次的12345678901超过了INTEGER最大值2147483647‬)

    另外,从题主的描述来看,题主似乎对于二进制的位数和十进制的位数没分清。题主一直在强调要插入一个11位十进制数,可能题主看GUI里显示INTEGER类型有"32位"就误以为应该能够插入。但是实际上这里的32位是二进制的位数(这也是我上文所述的GUI的槽点: 等它显示NUMERIC类型时,长度恐怕就又要变成了十进制的长度的意思了

最后,如果题主要插入11位的十进制数,可以考虑将列的类型改为BIGINT(int8)类型或直接用NUMERIC类型

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文