如何在使用MySQL的Yii2迁移中实现AUTO_INCREMENT?

Zor*_*eek 10 php mysql yii2

我为一个简单的MySQL(v5.6.21)表创建了一个yii2(v2.0.6)迁移.一切正常,除了我无法弄清楚如何AUTO_INCREMENT主键.问题似乎是我使用的是小整数而不是更标准的长整数数据类型.这是我的迁移代码:

$this->createTable('{{%status}}', [
    'id' =>          $this->smallInteger(8)->unique(),
    //'id' =>        $this->primaryKey(11),
    'description' => $this->string(20),
]);

$this->addPrimaryKey('','status','id');
Run Code Online (Sandbox Code Playgroud)

我可以通过使用 - > primaryKey()方法解决问题,该方法在上面第3行中注释掉,但是然后yii创建了一个长整数数据类型,我试图避免这种情况.任何对这个问题的见解都将非常感激.

Beo*_*tor 10

如果拥有该列类型至关重要,您可以随时更改它:

$this->createTable('{{%status}}', [
    'id'          => $this->primaryKey(11),
    'description' => $this->string(20),
]);
$this->alterColumn('{{%status}}', 'id', $this->smallInteger(8).' NOT NULL AUTO_INCREMENT');
Run Code Online (Sandbox Code Playgroud)

(我用MySQL测试过它 - 它有效)

然而,就像@scaisEdge所说的那样,通常不值得这么做.


sca*_*dge 5

为什么不简单地使用primaryKey?,整数(8),整数(11)或主键的格式始终相同,并且始终是整数长,或者您需要一个小整数(最多5位)或者您可以使用普通的,$this->primaryKey()因为

SMALLINT 用于存储 2 个字节(值 -32768 32767),然后 smallInteger(8) 不一致。数字 8 用于输出而不是存储格式。如果你想要8位数字,你至少需要4字节的INT -2147483648 2147483647或更多