【问题标题】:yii2 recommended lengths in user tableyii2 推荐的用户表长度
【发布时间】:2018-02-06 03:44:34
【问题描述】:

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

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

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 字段的长度

此字段有推荐的长度吗?它们是多少?

问候...

【问题讨论】:

  • 这更像是一个索引问题(我已经标记了重复的问题)。我有这些 255 大小的字段,很好。
  • 它不是重复的,更像是一个解释,因为我已经解决了mysql错误,我只是想优化一个yii2高级应用程序的索引值

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


【解决方案1】:

对于散列字段依赖于 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

【讨论】:

  • 但是 auth_key 和 password_reset_token 字段呢?
  • 取决于您的需要..以及您管理的相关内容..如果您也为这些字段使用哈希,那么这些长度相同,否则取决于您的数据内容长度...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-23
  • 2019-02-24
  • 1970-01-01
  • 2011-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多