首先,我正在创建一个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字段的长度
这个字段的推荐长度是多少?
问候......
答案 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