MySQL的主键应该只是INTEGER还是UNSIGNED INTEGER(适当大小)?

时间:2014-10-09 23:42:08

标签: mysql unsigned signed

让我们说我在MySQL中创建一个表:

CREATE TABLE animals (
    id INT NOT NULL AUTO_INCREMENT,
    name CHAR(30) NOT NULL,
    PRIMARY KEY (id)
);

主键应该只是INT还是我应该UNSIGNED INT?我知道负面的主键并没有多大意义,所以我认为它应该是UNSIGNED INT。虽然哪一个会更快?

3 个答案:

答案 0 :(得分:2)

你可以完全避免考虑它:

CREATE TABLE animals (
    id SERIAL,
    name CHAR(30) NOT NULL
);

(将其创建为unsigned int,并添加唯一索引和自动递增)

答案 1 :(得分:1)

我们对所有代理主键使用INT UNSIGNEDBIGINT UNSIGNED。我们还使用名称id作为列。

对于整数PRIMARY KEY,负值没有任何问题(或必然是邪恶的),有符号整数也可以。

使用无符号整数需要注意的一个问题:最大值比有符号整数的最大值更大。 (INT UNSIGNED最大值是2 ^ 32-1,而不是2 ^ 31-1。)任何客户端程序都需要知道这一点;如果值超过2 ^ 31-1,则将INT UNSIGNED映射为32位有符号整数(例如,C int类型)将是一个问题。

答案 2 :(得分:1)

如果它自动递增,就像它们通常那样,它应该是无符号的,否则你会在溢出点得到意外的排序。