亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

mysql索引過(guò)長(zhǎng)Specialed key was too long的解決方法

 更新時(shí)間:2021年11月08日 11:08:39   作者:一灰灰  
在創(chuàng)建要給表的時(shí)候遇到一個(gè)有意思的問(wèn)題,提示Specified key was too long; max key length is 767 bytes,本文就來(lái)介紹一下解決方法,如果你也遇到此類(lèi)問(wèn)題,可以參考一下

在創(chuàng)建要給表的時(shí)候遇到一個(gè)有意思的問(wèn)題,提示Specified key was too long; max key length is 767 bytes,從描述上來(lái)看,是Key太長(zhǎng),超過(guò)了指定的 767字節(jié)限制

下面是產(chǎn)生問(wèn)題的表結(jié)構(gòu)

CREATE TABLE `test_table` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(1000) NOT NULL DEFAULT '',
  `link` varchar(1000) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`),
  KEY `name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;

我們可以看到,對(duì)于name,我們?cè)O(shè)置長(zhǎng)度為1000可變字符,因?yàn)椴捎胾tf8mb4編碼, 所以它的大小就變成了 1000 * 4 > 767
所以再不修改其他配置的前提下,varchar的長(zhǎng)度大小應(yīng)該是 767 / 4 = 191

有興趣的同學(xué)可以測(cè)試下,分別指定name大小為191, 192時(shí),是不是前面的可以創(chuàng)建表成功,后面的創(chuàng)建表失敗,并提示錯(cuò)誤Specified key was too long; max key length is 767 bytes

解決辦法一

  • 使用innodb引擎
  • 啟用innodb_large_prefix選項(xiàng),修改約束擴(kuò)展至3072字節(jié)
  • 重新創(chuàng)建數(shù)據(jù)庫(kù)

my.cnf配置

set global innodb_large_prefix=on;
set global innodb_file_per_table=on;
set global innodb_file_format=BARRACUDA;
set global innodb_file_format_max=BARRACUDA;

上面這個(gè)3072字節(jié)的得出原因如下

我們知道InnoDB一個(gè)page的默認(rèn)大小是16k。由于是Btree組織,要求葉子節(jié)點(diǎn)上一個(gè)page至少要包含兩條記錄(否則就退化鏈表了)。
所以一個(gè)記錄最多不能超過(guò)8k。又由于InnoDB的聚簇索引結(jié)構(gòu),一個(gè)二級(jí)索引要包含主鍵索引,因此每個(gè)單個(gè)索引不能超過(guò)4k (極端情況,pk和某個(gè)二級(jí)索引都達(dá)到這個(gè)限制)。
由于需要預(yù)留和輔助空間,扣掉后不能超過(guò)3500,取個(gè)“整數(shù)”就是(1024*3)。

解決辦法二

在創(chuàng)建表的時(shí)候,加上 row_format=DYNAMIC

CREATE TABLE `test_table` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL DEFAULT '',
  `link` varchar(255) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`),
  KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 row_format=DYNAMIC;

這個(gè)參數(shù)的作用如下

MySQL 索引只支持767個(gè)字節(jié),utf8mb4 每個(gè)字符占用4個(gè)字節(jié),所以索引最大長(zhǎng)度只能為191個(gè)字符,即varchar(191),若想要使用更大的字段,mysql需要設(shè)置成支持?jǐn)?shù)據(jù)壓縮,并且修改表屬性 row_format ={DYNAMIC|COMPRESSED}

到此這篇關(guān)于mysql索引過(guò)長(zhǎng)Specialed key was too long的解決方法的文章就介紹到這了,更多相關(guān)mysql索引過(guò)長(zhǎng)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MYSQL分頁(yè)limit速度太慢的優(yōu)化方法

    MYSQL分頁(yè)limit速度太慢的優(yōu)化方法

    這篇文章主要介紹了MYSQL分頁(yè)limit速度太慢的優(yōu)化方法,需要的朋友可以參考下
    2016-05-05
  • MySQL數(shù)據(jù)庫(kù)優(yōu)化的六種方式總結(jié)

    MySQL數(shù)據(jù)庫(kù)優(yōu)化的六種方式總結(jié)

    關(guān)于數(shù)據(jù)庫(kù)優(yōu)化,網(wǎng)上有不少資料和方法,但是不少質(zhì)量參差不齊,所以下面這篇文章主要給大家介紹了關(guān)于MySQL數(shù)據(jù)庫(kù)優(yōu)化的六種方式,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-01-01
  • mysql數(shù)據(jù)庫(kù)連接池配置教程

    mysql數(shù)據(jù)庫(kù)連接池配置教程

    在與數(shù)據(jù)庫(kù)進(jìn)行連接的時(shí)候,會(huì)牽扯到數(shù)據(jù)庫(kù)連接池的配置,本文將詳細(xì)介紹mysql數(shù)據(jù)庫(kù)連接池配置,需要了解跟多的朋友可以參考下
    2012-11-11
  • mysql修改數(shù)據(jù)庫(kù)默認(rèn)路徑無(wú)法啟動(dòng)問(wèn)題的解決

    mysql修改數(shù)據(jù)庫(kù)默認(rèn)路徑無(wú)法啟動(dòng)問(wèn)題的解決

    這篇文章主要給大家介紹了關(guān)于mysql修改數(shù)據(jù)庫(kù)默認(rèn)路徑無(wú)法啟動(dòng)問(wèn)題的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11
  • MySQL筆記之運(yùn)算符使用詳解

    MySQL筆記之運(yùn)算符使用詳解

    運(yùn)算符包括四類(lèi),分別是:算數(shù)運(yùn)算符、比較運(yùn)算符、邏輯運(yùn)算符和位運(yùn)算符
    2013-05-05
  • 解讀SQL語(yǔ)句中要不要加單引號(hào)的問(wèn)題

    解讀SQL語(yǔ)句中要不要加單引號(hào)的問(wèn)題

    這篇文章主要介紹了關(guān)于SQL語(yǔ)句中要不要加單引號(hào)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • MySQL中觸發(fā)器和游標(biāo)的介紹與使用

    MySQL中觸發(fā)器和游標(biāo)的介紹與使用

    這篇文章主要給大家介紹了關(guān)于MySQL中觸發(fā)器和游標(biāo)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • 清理MySQL Binlog二進(jìn)制日志的三種方式

    清理MySQL Binlog二進(jìn)制日志的三種方式

    Binlog日志非常重要,但是占用的磁盤(pán)空間也很大,我們也需要定期的去清理二進(jìn)制日志,在MySQL數(shù)據(jù)庫(kù)中,提供了自動(dòng)清理Binlog日志的參數(shù),本文給大家介紹了清理MySQL Binlog二進(jìn)制日志的三種方式,文中通過(guò)代碼講解非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • 檢查MySQL中的列是否為空或Null的常用方法

    檢查MySQL中的列是否為空或Null的常用方法

    在MySQL數(shù)據(jù)庫(kù)中,我們經(jīng)常需要檢查某個(gè)列是否為空或Null,空值表示該列沒(méi)有被賦值,而Null表示該列的值是未知的或不存在的,在本文中,我們將討論如何在MySQL中檢查列是否為空或Null,并探討不同的方法和案例,需要的朋友可以參考下
    2023-11-11
  • MySQL筆記之字符串函數(shù)的應(yīng)用

    MySQL筆記之字符串函數(shù)的應(yīng)用

    字符串操作在程序設(shè)計(jì)中是非常重要的組成部分,而MySQL數(shù)據(jù)庫(kù)中的字符串操作卻相當(dāng)簡(jiǎn)單
    2013-05-05

最新評(píng)論