我遇到了这篇文章(What is the difference between tinyint, smallint, mediumint, bigint and int in MySQL?)并意识到PostgreSQL不支持无符号整数 .
任何人都可以帮忙解释为什么会如此?
大多数时候,我使用无符号整数作为MySQL中的自动递增主键 . 在这样的设计中,当我将数据库从MySQL移植到PostgreSQL时,如何克服这个问题呢?
谢谢 .
我遇到了这篇文章(What is the difference between tinyint, smallint, mediumint, bigint and int in MySQL?)并意识到PostgreSQL不支持无符号整数 .
任何人都可以帮忙解释为什么会如此?
大多数时候,我使用无符号整数作为MySQL中的自动递增主键 . 在这样的设计中,当我将数据库从MySQL移植到PostgreSQL时,如何克服这个问题呢?
谢谢 .
4 回答
已经回答了postgresql缺少无符号类型的原因 . 但是,我建议将域用于无符号类型 .
http://www.postgresql.org/docs/9.4/static/sql-createdomain.html
域就像一个类型,但有一个额外的约束 .
您可以使用具体示例
这是我尝试滥用类型时psql给出的内容 .
它不符合SQL标准,因此实现它的一般要求较低 .
具有太多不同的整数类型会使类型分辨率系统更加脆弱,因此在混合中添加更多类型会有一些阻力 .
也就是说,没有理由不能这样做 . 这只是很多工作 .
您可以使用CHECK约束,例如:
PostgreSQL还有
serial
和bigserial
类型用于自动增量 .根据最新文档,支持singed整数但表中没有无符号整数 . 但是,串行类型有点类似于unsigned,除了它从1开始而不是从0开始 . 但上限与烧焦相同 . 所以系统真的没有未签名的支持 . 正如彼得所指出的,门是开放的,以实现未签名的版本 . 代码可能需要进行大量更新,这与我使用C编程的经验相比有太大的作用 .
https://www.postgresql.org/docs/10/datatype-numeric.html