91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

mysql提示字符長度超限制的解決方法

發布時間:2020-06-11 16:16:16 來源:億速云 閱讀:1253 作者:鴿子 欄目:編程語言

mysql在創建數據庫的時候,字符集設置的不是utf8而是utf9mb4,在導入sql腳本的時候,發現提示如下錯誤:

mysql提示字符長度超限制的解決方法

從上圖中,我們可以看出,使用的是innodb及字符集。錯誤提示是長度太長了:Specified key was too long; max key length is 767 bytes

來查看下創建表的語句:

CREATE TABLE `xxl_job_registry` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`registry_group` varchar(50) NOT NULL,

`registry_key` varchar(255) NOT NULL,

`registry_value` varchar(255) NOT NULL,

`update_time` datetime DEFAULT NULL,

PRIMARY KEY (`id`),

KEY `i_g_k_v` (`registry_group`,`registry_key`,`registry_value`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

varchar的長度明明設置的是255啊。怎么會報出767 bytes的錯誤呢?

我們在看看錯誤提示:

[Err] 1071 - Specified key was too long; max key length is 767 bytes。

這個就是因為聯合所以長度限制的。

我們來看看MySql InnoDB引擎對索引長度的限制:

mysql單索引限制:

在默認情況下,InnoDB對單一的字段索引長度限制最大為767個字節。

這個長度怎么來的呢 ?當mysql創建數據庫的時候,字符集使用的是UTF-8的時候,我們知道UTF-8每個字符使用三個字節來存儲的。即:256*3-1=767了。這個767字符大小的限制就是從這里來的。

聯合索引(前綴索引)限制:

同樣的,mysql對前綴索引也有同樣的限制。根據字符集不同,長度限制也不同。

字符集使用utf8的時候長度限制是:767個

使用uft8mb4的時候長度限制是:3072個

但是,在文章一開始,凱哥就強調了,凱哥數據庫使用的字符集是:utf8mb4。我們也知道,utf8mb4編碼的每個字符使用四個字節來存儲的。我們來計算下:256*4-1>767。

從凱哥的sql腳本可以看出:KEY `i_g_k_v` (`registry_group`,`registry_key`,`registry_value`) 使用到了聯合索引(前綴索引)。

隨意凱哥數據庫的字符集使用的不是utf8,但是mysql系統變量innodb_large_prefix未開啟(因為凱哥使用的是默認配置)。如果系統變量innodb_large_prefix開啟了,就會對使用dynamic或者是comperssed行格式的InnoD表,索引鍵長度限制為3072個字節了。如果沒有開啟這個,InnoDB會對,無論什么表索引鍵長度限制都是767了。

解決方案有兩種:
1:mysql系統變量innodb_large_prefix開啟。

需要修改配置,重啟mysql服務等等。。。太麻煩了。凱哥這里使用了第二種方案

2:修改聯合主鍵中每個字段的長度

聯合主鍵的三個字段如下:

`registry_group` varchar(50) NOT NULL,

`registry_key` varchar(255) NOT NULL,

`registry_value` varchar(255) NOT NULL,

將varchar(255)的修改為varchar(100)后(注:這里的長度根據自己需求進行設置。如果非要用255個字符以上,請選擇使用第一種解決方案),sql腳本就執行成功。如下圖:

mysql提示字符長度超限制的解決方法

延伸知識點:

當遇到如下錯誤:

mysql提示字符長度超限制的解決方法

錯誤信息是3072的時候,說明開啟了系統變量,但是還是超長了。這個時候,可以采用同樣的方案來處理。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

读书| 西乡县| 汶川县| 高陵县| 榆中县| 元阳县| 东兰县| 兴安盟| 剑阁县| 富蕴县| 淮阳县| 筠连县| 丹凤县| 苗栗市| 高要市| 宝鸡市| 镇巴县| 吴忠市| 呼和浩特市| 仪征市| 祁东县| 琼海市| 韶关市| 韶山市| 邹平县| 鹤岗市| 南宫市| 盐津县| 阿坝县| 铜鼓县| 阿坝| 微山县| 巴林左旗| 弥勒县| 缙云县| 彭阳县| 宜城市| 昌宁县| 基隆市| 平和县| 临朐县|