2016-12-16 17 views
-1

我試圖在MariaDB中創建一個表,我希望它是VARCHAR(767)和PRIMARY KEY。我使用了這個命令,但這不是我想要的。MariaDB不會創建具有較大VARCHAR的表作爲PRIMARY KEY

CREATE TABLE main(username VARCHAR(767) NOT NULL); 

該命令被執行,但如果我添加PRIMARY KEY,則會出現錯誤。

CREATE TABLE main(username VARCHAR(767) NOT NULL PRIMARY KEY); 
ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes 

回答

0

你使用的是什麼版本?我已經在我的MariaDB(10.1.20-MariaDB)上試過了你的命令,主鍵可以創建爲varchar 767長。

MariaDB [test]> CREATE TABLE main(username VARCHAR(767) NOT NULL); 
Query OK, 0 rows affected (0.05 sec) 

MariaDB [test]> drop table main; 
Query OK, 0 rows affected (0.01 sec) 

MariaDB [test]> CREATE TABLE main(username VARCHAR(767) NOT NULL PRIMARY KEY); 
Query OK, 0 rows affected (0.02 sec) 

MariaDB [test]> select version(); 
+-----------------+ 
| version()  | 
+-----------------+ 
| 10.1.20-MariaDB | 
+-----------------+ 
1 row in set (0.00 sec) 
+0

10.0.28-MariaDB這不是在osx中​​發生的,但我在Ubuntu上嘗試過,並且出現錯誤 – rafidkarim

0

的限制是索引鍵的數據庫引擎長度

這裏有點更多的討論。 What is the index key size limit in MariaDB?

一般來說,我會不鼓勵使用長索引,特別是主鍵。我會使用代理(像一個整數)。

而且,實際上,700個字符的用戶名變得有點笨拙。

0

VARCHAR(767)允許767 個字符。如果默認字符集是utf8,則需要3 * 767 字節

對於索引中的單個列,舊版本的限制爲767 字節。 (和PRIMARY KEY是一個索引。)

下面是在舊版本將varchar限制:

  • LATIN1:765個字符(長度2個字節;每個字符是1個字節
  • UTF8:255個字符(UTF8是 '真正的' UTF8的3字節子集)
  • utf8mb4:4字節UTF8編碼被允許191個字符(

對於較新的版本,限制約爲4倍。

如果你真的需要比可用限制更大的PRIMARY KEYUNIQUE KEY,我們可以討論使用哈希等技巧。但我們需要了解它是什麼類型的數據,你正在使用什麼版本,你需要什麼字符集,等等

相關問題