我什么时候应该在MySQL中使用UNSIGNED和SIGNED INT?

Tux*_*Tux 91 mysql

我什么时候应该在MySQL中使用UNSIGNED和SIGNED INT?什么是更好的使用或这只是个人的偏好?因为我看到它像这样使用;

id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT
Run Code Online (Sandbox Code Playgroud)

id INT(11) NOT NULL AUTO_INCREMENT
Run Code Online (Sandbox Code Playgroud)

Wis*_*guy 152

UNSIGNED只存储正数(或零).另一方面,签名可以存储负数(即,可能有负).

这是每个INTEGER类型可以存储的值范围的表:

MySQL INTEGER类型和长度
资料来源:http://dev.mysql.com/doc/refman/5.6/en/integer-types.html

UNSIGNED范围从0n,而有符号范围从大约-n/2n/2.

在这种情况下,您有一个AUTO_INCREMENTID列,因此您不会有负片.因此,使用UNSIGNED.如果不使用UNSIGNEDAUTO_INCREMENT列,则最大可能值将是一半(并且值范围的负半部分将不使用).

  • 但请注意,"UNSIGNED"是特定于MySQL的,而*不是标准的SQL功能.这意味着使用`UNSIGNED`可以使将来迁移到不同的RDBMS更复杂,或者在使用针对标准SQL(如SQLAlchemy)的软件库时会遇到困难.我认为这应该是答案的一部分. (8认同)
  • 支持@minexew 的评论。我在 Python 中使用 SQLAlchemy 和 MySQL 数据库。我遇到分配外键限制的问题,因为以前创建的表具有 UNSIGNED 整数,而像 SQLAlchemy 这样遵循 SQL 标准的库没有创​​建 UNSIGNED 列的选项,除非您开始编写 MySQL 特定代码。尽管它仍然绝对可用,但它的可扩展性不高(即使用 SQLite 数据库进行集成测试等)。 (3认同)

Pau*_*ich 7

使用UNSIGNED非负整数.


Srn*_*zek 5

基本上,使用UNSIGNED,您为整数提供了两倍的空间,因为您明确指定不需要负数(通常是因为您存储的值永远不会是负数)。


归档时间:

查看次数:

78278 次

最近记录:

6 年 前