2012-05-17 82 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); 
} 
相關問題