1

我正在使用 mysql 5.0.91,我需要保存 URL(有些很小,有些很长)。我想使用varchar(2000),但出现错误:

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

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

4

4 回答 4

5

unique=True在你的 urls 列上使用吗?MySQL 正在该列上构建唯一索引,每个字符使用的字节数取决于编码。

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

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

于 2013-03-21T07:50:34.300 回答
0

我跑了那个错误,因为我在 db 中选择了 utf-16 排序规则 - 切换回 utf-8 general-ci - 它消失了。

于 2013-03-04T15:20:16.207 回答
0

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

use Illuminate\Support\Facades\Schema;

/**
 * Bootstrap any application services.
 *
 * @return void
 */
public function boot()
{
    Schema::defaultStringLength(191);
}
于 2017-03-25T08:46:55.090 回答
0

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

$table->string('email', 250)->unique();
于 2017-03-11T13:35:02.930 回答