2012-05-17 83 views
1

我使用mysql 5.0.91,我需要保存URL(有些很小,有些很长)。 我想用varchar(2000),但我得到一个错误:错误:#1071 - 指定的密钥太长;最大密钥长度是1000字节 - mysql 5.0.91

#1071 - Specified key was too long; max key length is 1000 bytes

什么是救我使用MySQL 5.0.91托管网址的最佳方式?

+1

'TEXT'及其变种是最适合这一点。 – PhD

+0

看看这些是否有用(总是研究你的错误信息):http://stackoverflow.com/search?q=+%231071+-+Specified+key+was+too+long%3B+max+key+长度+是+ 1000 +字节或http://stackoverflow.com/questions/tagged/mysql-error-1071 –

+3

你有点问两个单独的问题。最好的方法来存储URL:http://stackoverflow.com/a/219664/398242您的错误的原因以及如何解决它:http://stackoverflow.com/questions/1814532/1071-specified-key-was-too - 长 - 最大密钥长度是767字节/ 1814594#1814594 –

回答

0

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

5

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

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

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

0

重写你的电子邮件领域,如:

$table->string('email', 250)->unique(); 
0

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

use Illuminate\Support\Facades\Schema; 

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