yii2用户表中推荐的长度

时间:2018-02-06 03:44:35

标签: database mysqli database-design yii2 yii2-advanced-app

首先,我正在创建一个yii2高级应用程序,我不是在问如何解决1071错误,我问如何改变迁移脚本以更好地将其调整为我的托管数据库限制

将我的站点数据库从我的localhost上传到生产服务器(共享主机)时出现以下错误:

  

1071 - 指定密钥太长;最大密钥长度为767字节

所以我必须使用以下参数重新安排我的迁移脚本:

$this->createTable('{{%user}}', [
            'id' => $this->primaryKey(),
            'username' => $this->string(60)->notNull()->unique(),
            'auth_key' => $this->string(32)->notNull(),
            'password_hash' => $this->string(70)->notNull(),
            'password_reset_token' => $this->string(70)->unique(),
            'email' => $this->string(60)->notNull()->unique(),

            'status' => $this->smallInteger()->notNull()->defaultValue(10),
            'created_at' => $this->integer()->notNull(),
            'updated_at' => $this->integer()->notNull(),
        ], $tableOptions);

但我不得不猜测auth_key,password_hash和password_reset_token字段的长度

这个字段的推荐长度是多少?

问候......

1 个答案:

答案 0 :(得分:0)

对于散列字段依赖于hashin算法的SHA-1(mysql使用的一个)值总是160位长, 根据您使用CHAR或BINARY的dat类型,对于每个字符4位的类型,需要160/4 = 40个字符。但是对于每个字符8位,您需要一个160/8 = 20个字符的长字段。 如果使用VARCHAR,则需要一个额外的字节作为固定长度字段的长度。那么

MD5生成128位哈希值。您可以使用CHAR(32)或BINARY(16)或VARCHAR(33)

SHA-1生成160位哈希值。您可以使用CHAR(40)或BINARY(20)或VARCHAR(41)

SHA-224生成224位哈希值。您可以使用CHAR(56)或BINARY(28)或VARCHAR(57)

SHA-256生成256位哈希值。您可以使用CHAR(64)或BINARY(32)或或VARCHAR(65)

但通常使用SHA-1