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

Mysql之索引長(zhǎng)度限制方式

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

Mysql索引長(zhǎng)度限制

在設(shè)置 utf8mb4 字段的字符長(zhǎng)度時(shí),可能會(huì)拋出一個(gè)異常:

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

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

一、原因分析

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

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

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

對(duì)于 InnoDB 引擎來(lái)說(shuō):

1) Mysql 版本 <=5.7.6

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

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

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

2) Mysql 版本 >=5.7.7

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

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

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

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

對(duì)于 MyISAN 引擎來(lái)說(shuō):

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

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

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

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

二、解決方法

(1)修改存儲(chǔ)引擎

(2)修改字符集

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

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

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

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

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

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

innodb_large_prefix=ON
innodb_file_per_table=ON
innodb_file_format=Barracuda

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

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

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

并且,在創(chuàng)建新表時(shí)還要指定 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)建索引時(shí)限制字段上的前綴索引長(zhǎ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é)

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

相關(guān)文章

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

    mysql 5.7.19 winx64免安裝版配置教程

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

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

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

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

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

    mysql IS NULL使用索引案例講解

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

    MySQL命令行刪除表中的一個(gè)字段

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

    你真的會(huì)用Mysql的explain嗎

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

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

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

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

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

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

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

    mysql存儲(chǔ)過(guò)程原理與用法詳解

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

最新評(píng)論

井研县| 北宁市| 朔州市| 宜宾市| 纳雍县| 西峡县| 丽水市| 普陀区| 巴林左旗| 平邑县| 同江市| 凤山市| 游戏| 吴忠市| 庆城县| 鹤庆县| 五指山市| 金寨县| 陵川县| 龙州县| 上犹县| 图木舒克市| 宁海县| 凤庆县| 孝感市| 米泉市| 益阳市| 新晃| 紫金县| 运城市| 鲁山县| 乌苏市| 稷山县| 青岛市| 苗栗市| 昌乐县| 基隆市| 都昌县| 绥阳县| 敦煌市| 金坛市|