最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Mysql之索引長度限制方式

 更新時間:2024年01月29日 08:32:35   作者:magic_kid_2010  
這篇文章主要介紹了Mysql之索引長度限制方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

Mysql索引長度限制

在設(shè)置 utf8mb4 字段的字符長度時,可能會拋出一個異常:

"Specified key was too long; max key length is 1000 bytes"

也就是在給表的索引字段添加字符長度時,超過了最大索引長度 1000 字節(jié)。

一、原因分析

關(guān)于索引長度的限制,最主要的因素就是存儲引擎和字符集。

字符集的影響在于,不同的字符集,單個字符包含的最大字節(jié)數(shù)有所不同。

比如 utf8 字符集,一個字符最多包含 3 個字節(jié)。而 utf8mb4 一個字符最多包含 4 個字節(jié)。

對于 InnoDB 引擎來說:

1) Mysql 版本 <=5.7.6

  • 如果是單字段索引,則字段長度不應(yīng)超過 767 字節(jié)。
  • 如果是聯(lián)合索引,則每個字段長度都不應(yīng)超過 767 字節(jié),且所有字段長度合計不應(yīng)超過 3072 字節(jié)。

這種情況下,常見字符集和引擎組合后的字符長度限制如下:

InnoDB最大字節(jié)數(shù)單字段索引最大字符數(shù)聯(lián)合索引合計最大字符數(shù)
lantin117673072
gbk23831536
utf832551024
utf8mb44191768

2) Mysql 版本 >=5.7.7

在該版本情況下,由于 InnoDB 引擎的 innodb_large_prefix 等選項默認(rèn)值改變,單字段索引長度限制增大。

  • 如果是單字段索引,則字段長度不應(yīng)超過 3072 字節(jié)。
  • 如果是聯(lián)合索引,則每個字段長度都不應(yīng)超過 3072 字節(jié),且所有字段長度合計不應(yīng)超過 3072 字節(jié)。

這種情況下,常見字符集和引擎組合后的字符長度限制如下:

InnoDB最大字節(jié)數(shù)單字段索引最大字符數(shù)聯(lián)合索引合計最大字符數(shù)
lantin1130723072
gbk215361536
utf8310241024
utf8mb44768768

對于 MyISAN 引擎來說:

如果 Mysql 版本 <=5.5.4 則其默認(rèn)存儲引擎為 MyISAN。

  • 如果是單字段索引,則字段長度不應(yīng)超過 1000 字節(jié)。
  • 如果是聯(lián)合索引,則每個字段長度都不應(yīng)超過 1000 字節(jié),且所有字段長度合計不應(yīng)超過 1000 字節(jié)。

這種情況下,常見字符集和引擎組合后的字符長度限制如下:

MyISAM最大字節(jié)數(shù)單字段索引最大字符數(shù)多字段索引合計最大字符數(shù)
lantin1110001000
gbk2500500
utf83333333
utf8mb44250250

二、解決方法

(1)修改存儲引擎

(2)修改字符集

(3)修改索引字段的字符長度

在 Mysql 版本 <=5.7.6 且字符集為 utf8mb4 的情況下,設(shè)置需要添加索引的字段長度為 191。

(4)在 Mysql<=5.7.6 的情況,修改 InnoDB 選項,將單字段索引長度限制由 767 字節(jié)(bytes)提高到 3072 字節(jié)。

先查看當(dāng)前默認(rèn)選項值:

SHOW VARIABLES LIKE 'innodb_large_prefix';
SHOW VARIABLES LIKE 'innodb_file_per_table';
SHOW VARIABLES LIKE 'innodb_file_format';

確認(rèn)選項值是否是:

innodb_large_prefix=ON
innodb_file_per_table=ON
innodb_file_format=Barracuda

如果不是,進行相應(yīng)的修改:

SET GLOBAL innodb_large_prefix = 1;
SET GLOBAL innodb_file_per_table = 1;
SET GLOBAL innodb_file_format = barracuda;

上面兩項的值設(shè)置為 1 而不是 ON,是因為在 Mysql5.6 之前,布爾值的變量還無法識別 ON 或者 OFF,只能是數(shù)字 1 或者 0。

并且,在創(chuàng)建新表時還要指定 ROW_FORMAT=DYNAMIC 或 ROW_FORMAT=COMPRESSED。

如:

CREATE TABLE `test` (
`a` varchar(767),
`b` varchar(1),
`c` varchar(200),
`d` varchar(168),
`e` varchar(5),
KEY `a_index` (`a`,`b`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;

或修改當(dāng)前表:

ALTER TABLE [...], ROW_FORMAT=DYNAMIC;

(5)在創(chuàng)建索引時限制字段上的前綴索引長度:

CREATE TABLE `test` (
`a` varchar(767),
`b` varchar(1),
`c` varchar(200),
`d` varchar(168),
`e` varchar(5),
KEY `a_index` (`a`(191),`b`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • mysql 5.7.19 winx64免安裝版配置教程

    mysql 5.7.19 winx64免安裝版配置教程

    這篇文章主要為大家詳細(xì)介紹了mysql 5.7.19 winx64免安裝版配置教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • MySQL數(shù)據(jù)庫InnoDB引擎主從復(fù)制同步經(jīng)驗總結(jié)

    MySQL數(shù)據(jù)庫InnoDB引擎主從復(fù)制同步經(jīng)驗總結(jié)

    這篇文章主要介紹了MySQL數(shù)據(jù)庫InnoDB引擎主從復(fù)制同步經(jīng)驗總結(jié),本文總結(jié)了設(shè)置主從復(fù)制時遇到的一些錯誤和解決方法,需要的朋友可以參考下
    2015-01-01
  • MySQL創(chuàng)建帶特殊字符的數(shù)據(jù)庫名稱方法示例

    MySQL創(chuàng)建帶特殊字符的數(shù)據(jù)庫名稱方法示例

    這篇文章主要給大家介紹了MySQL創(chuàng)建帶特殊字符的數(shù)據(jù)庫名稱方法,文中給出了詳細(xì)的示例代碼,需要的朋友可以參考學(xué)習(xí),下面來一起看看吧。
    2017-03-03
  • mysql IS NULL使用索引案例講解

    mysql IS NULL使用索引案例講解

    這篇文章主要介紹了mysql IS NULL使用索引案例講解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • MySQL命令行刪除表中的一個字段

    MySQL命令行刪除表中的一個字段

    本文介紹在MySQL數(shù)據(jù)庫中,如何根據(jù)字段名來刪除表中的一個字段,需要的朋友可以參考下
    2016-04-04
  • 你真的會用Mysql的explain嗎

    你真的會用Mysql的explain嗎

    explain顯示了mysql如何使用索引來處理select語句以及連接表,可以幫助選擇更好的索引和寫出更優(yōu)化的查詢語句,下面這篇文章主要給大家介紹了關(guān)于Mysql中explain用法的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • MySQL 內(nèi)置函數(shù)指南之日期、字符串、數(shù)學(xué)函數(shù)實戰(zhàn)

    MySQL 內(nèi)置函數(shù)指南之日期、字符串、數(shù)學(xué)函數(shù)實戰(zhàn)

    本文基于實戰(zhàn)場景,全面拆解 MySQL 常用內(nèi)置函數(shù),涵蓋日期、字符串、數(shù)學(xué)、其他工具類函數(shù),附帶詳細(xì)案例和避坑要點,感興趣的朋友跟隨小編一起看看吧
    2026-03-03
  • 詳細(xì)聊一聊mysql的樹形結(jié)構(gòu)存儲以及查詢

    詳細(xì)聊一聊mysql的樹形結(jié)構(gòu)存儲以及查詢

    由于mysql是關(guān)系型數(shù)據(jù)庫,因此對于類似組織架構(gòu),子任務(wù)等相關(guān)的樹形結(jié)構(gòu)的處理不是很友好,下面這篇文章主要給大家介紹了關(guān)于mysql樹形結(jié)構(gòu)存儲以及查詢的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • MySQL 日期和時間函數(shù)示例詳解

    MySQL 日期和時間函數(shù)示例詳解

    本文詳細(xì)介紹了MySQL中處理日期和時間的各種函數(shù),包括獲取當(dāng)前日期時間、日期提取、格式化和解析、計算和運算、生成和構(gòu)造、驗證和調(diào)整、時間戳轉(zhuǎn)換以及實用查詢示例,并提供了性能優(yōu)化建議,感興趣的朋友跟隨小編一起看看吧
    2026-03-03
  • mysql存儲過程原理與用法詳解

    mysql存儲過程原理與用法詳解

    這篇文章主要介紹了mysql存儲過程,結(jié)合圖文與實例形式較為詳細(xì)的分析了mysql存儲過程基本概念、原理、用法及相關(guān)操作注意事項,需要的朋友可以參考下
    2020-04-04

最新評論

浦城县| 运城市| 临颍县| 湖北省| 武安市| 新巴尔虎左旗| 黑河市| 湖南省| 山阴县| 双鸭山市| 永州市| 东兰县| 湄潭县| 甘洛县| 辛集市| 山西省| 黑龙江省| 天长市| 邓州市| 娄烦县| 桂平市| 资源县| 丰城市| 阳高县| 襄城县| 同仁县| 紫阳县| 罗定市| 分宜县| 右玉县| 夏邑县| 易门县| 泸州市| 广昌县| 高邮市| 乐亭县| 邵武市| 鄂温| 台山市| 独山县| 桐庐县|