错误:#1071 - 指定密钥太长;最大密钥长度为1000字节 - mysql 5.0.91

时间:2012-05-17 19:40:07

标签: mysql mysql-error-1071

我使用的是mysql 5.0.91,我需要保存URL(有些很小,有些很长)。 我想使用varchar(2000)但我收到错误:

  

#1071 - 指定的密钥太长;最大密钥长度为1000字节

使用mysql 5.0.91在我的主机上保存URL的最佳方法是什么?

4 个答案:

答案 0 :(得分:5)

您在网址栏上使用unique=True吗? MySQL正在该列上构建一个唯一索引,并且每个字符使用的字节数因编码而异。

例如,如果它是UTF-16,则每个字符将使用2个字节,因此varchar(2000)列将为4000个字节,并且如错误消息所示,最大密钥长度为1000个字节。 / p>

因此,您可以切换到UTF-8并使用varchar(900)来解决此问题。

答案 1 :(得分:0)

我跑了那个错误,因为我在db中选择utf-16整理 - 切换回utf-8 general-ci - 它已经消失了。

答案 2 :(得分:0)

重写您的电子邮件字段,如:

BasicLSTMCell

答案 3 :(得分:0)

Laravel默认使用utf8mb4字符集,其中包括支持在数据库中存储“emojis”。如果您运行的是早于5.7.7版本的MySQL版本或早于10.2.2版本的MariaDB,您可能需要手动配置迁移生成的默认字符串长度,以便MySQL为它们创建索引。您可以通过在 AppServiceProvider 中调用 Schema :: defaultStringLength 方法来配置它:

use Illuminate\Support\Facades\Schema;

/**
 * Bootstrap any application services.
 *
 * @return void
 */
public function boot()
{
    Schema::defaultStringLength(191);
}