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

MySQL表列數(shù)和行大小限制示例詳解

 更新時(shí)間:2024年04月13日 11:58:22   作者:EulerBlind  
行是表中存儲(chǔ)數(shù)據(jù)的行,也稱為記錄,MySQL的行上限主要受限于兩個(gè)因素,表的大小和操作系統(tǒng)的限制,這篇文章主要給大家介紹了關(guān)于MySQL表列數(shù)和行大小限制的相關(guān)資料,需要的朋友可以參考下

前言

MySQL是一種常用的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),廣泛用于Web應(yīng)用程序的開發(fā)和數(shù)據(jù)存儲(chǔ)。在使用MySQL的過程中,了解表格列數(shù)和行大小的限制是至關(guān)重要的,因?yàn)樗鼈冎苯佑绊懙綌?shù)據(jù)庫的設(shè)計(jì)和性能。本文將深入探討MySQL中列數(shù)和單個(gè)行大小的限制。

限制維度

列數(shù)量限制

MySQL對(duì)每個(gè)表設(shè)置了硬限制,即每個(gè)表最多有4096列,但對(duì)于給定的表,實(shí)際最大列數(shù)可能會(huì)更少。確切的列限制取決于多個(gè)因素:

表的最大行大小

表的最大行大小限制了列數(shù)(可能還包括列的大小),因?yàn)樗辛械目傞L(zhǎng)度不能超過這個(gè)大小。有關(guān)更多信息,請(qǐng)參閱行大小限制。

單個(gè)列的存儲(chǔ)要求

單個(gè)列的存儲(chǔ)要求會(huì)限制適應(yīng)給定最大行大小的列數(shù)。不同數(shù)據(jù)類型的存儲(chǔ)要求取決于存儲(chǔ)引擎、存儲(chǔ)格式和字符集等因素。

存儲(chǔ)引擎的附加限制

存儲(chǔ)引擎可能會(huì)施加額外的限制,進(jìn)一步限制表的列數(shù)。例如,InnoDB對(duì)每個(gè)表有一個(gè)1017列的限制。

功能鍵部分

功能鍵部分(“CREATE INDEX Statement”)被實(shí)現(xiàn)為隱藏的虛擬生成的存儲(chǔ)列,因此表索引中的每個(gè)功能鍵部分都計(jì)入表的總列限制。

行容量限制

給定表的行容量大小由多個(gè)因素決定

MySQL表的內(nèi)部實(shí)現(xiàn)

MySQL表的內(nèi)部實(shí)現(xiàn)對(duì)行的最大大小設(shè)定了一個(gè)限制,即使存儲(chǔ)引擎能夠支持更大的行。BLOB和TEXT列僅對(duì)行大小限制貢獻(xiàn)了9到12字節(jié),因?yàn)樗鼈兊膬?nèi)容存儲(chǔ)在行的其余部分之外。

InnoDB表的最大行大小

對(duì)于InnoDB表,其最大行大小適用于存儲(chǔ)在數(shù)據(jù)庫頁面內(nèi)的本地?cái)?shù)據(jù),對(duì)于4KB、8KB、16KB和32KB的innodb_page_size設(shè)置,最大行大小略小于頁面的一半。例如,默認(rèn)的16KB InnoDB頁面大小的最大行大小略小于8KB。對(duì)于64KB頁面,最大行大小略小于16KB。

超出InnoDB最大行大小的處理

如果包含變長(zhǎng)列的行超過了InnoDB最大行大小,InnoDB會(huì)選擇將變長(zhǎng)列存儲(chǔ)在頁面外,直到行適應(yīng)InnoDB行大小限制。存儲(chǔ)在本地的存儲(chǔ)在頁面外的可變長(zhǎng)度列的數(shù)據(jù)量因行格式而異。

不同存儲(chǔ)格式的影響

不同的存儲(chǔ)格式使用不同數(shù)量的頁面頭部和尾部數(shù)據(jù),這會(huì)影響可用于行的存儲(chǔ)量

  • InnoDB行格式
  • MyISAM存儲(chǔ)格式

限制示例

行大小限制示例

MySQL的最大行大小限制為65,535字節(jié),以下是對(duì)InnoDB和MyISAM示例的演示。盡管存儲(chǔ)引擎可能支持更大的行,但這個(gè)限制是強(qiáng)制執(zhí)行的,與存儲(chǔ)引擎無關(guān)。

InnoDB下

mysql> CREATE TABLE t (a VARCHAR(10000), b VARCHAR(10000),
       c VARCHAR(10000), d VARCHAR(10000), e VARCHAR(10000),
       f VARCHAR(10000), g VARCHAR(6000)) ENGINE=InnoDB CHARACTER SET latin1;
ERROR 1118 (42000): Row size too large. The maximum row size for the used
table type, not counting BLOBs, is 65535. This includes storage overhead,
check the manual. You have to change some columns to TEXT or BLOBs

在InnoDB表中,將列更改為TEXT成功進(jìn)行的原因是,這樣的變更避免了MySQL的65,535字節(jié)行大小限制,并且InnoDB對(duì)可變長(zhǎng)度列的頁外存儲(chǔ)也規(guī)避了InnoDB行大小限制。

mysql> CREATE TABLE t (a VARCHAR(10000), b VARCHAR(10000),
       c VARCHAR(10000), d VARCHAR(10000), e VARCHAR(10000),
       f VARCHAR(10000), g TEXT(6000)) ENGINE=InnoDB CHARACTER SET latin1;
Query OK, 0 rows affected (0.02 sec)

MyISAM下

mysql> CREATE TABLE t (a VARCHAR(10000), b VARCHAR(10000),
       c VARCHAR(10000), d VARCHAR(10000), e VARCHAR(10000),
       f VARCHAR(10000), g VARCHAR(6000)) ENGINE=MyISAM CHARACTER SET latin1;
ERROR 1118 (42000): Row size too large. The maximum row size for the used
table type, not counting BLOBs, is 65535. This includes storage overhead,
check the manual. You have to change some columns to TEXT or BLOBs

在以下的MyISAM示例中,將列更改為TEXT可以避免65,535字節(jié)的行大小限制,并且允許操作成功進(jìn)行,因?yàn)锽LOB和TEXT列僅對(duì)行大小貢獻(xiàn)了9到12字節(jié)。

mysql> CREATE TABLE t (a VARCHAR(10000), b VARCHAR(10000),
       c VARCHAR(10000), d VARCHAR(10000), e VARCHAR(10000),
       f VARCHAR(10000), g TEXT(6000)) ENGINE=MyISAM CHARACTER SET latin1;
Query OK, 0 rows affected (0.02 sec)

InnoDB變長(zhǎng)情況示例

可變長(zhǎng)度列的存儲(chǔ)包括長(zhǎng)度字節(jié),這些字節(jié)計(jì)入行大小。例如,一個(gè)VARCHAR(255) CHARACTER SET utf8mb3列占用兩個(gè)字節(jié)來存儲(chǔ)值的長(zhǎng)度,因此每個(gè)值最多可以占用767字節(jié)。

以下是創(chuàng)建表t1的語句,成功的原因是這些列需要32,765 + 2字節(jié)和32,766 + 2字節(jié),總大小在65,535字節(jié)的最大行大小范圍內(nèi):

mysql> CREATE TABLE t1
       (c1 VARCHAR(32765) NOT NULL, c2 VARCHAR(32766) NOT NULL)
       ENGINE = InnoDB CHARACTER SET latin1;
Query OK, 0 rows affected (0.02 sec)

創(chuàng)建表t2的語句失敗,盡管列的長(zhǎng)度在65,535字節(jié)的最大長(zhǎng)度范圍內(nèi),但仍需要額外的兩個(gè)字節(jié)來記錄長(zhǎng)度,導(dǎo)致行大小超過了65,535字節(jié):

mysql> CREATE TABLE t2
       (c1 VARCHAR(65535) NOT NULL)
       ENGINE = InnoDB CHARACTER SET latin1;
ERROR 1118 (42000): Row size too large. The maximum row size for the used
table type, not counting BLOBs, is 65535. This includes storage overhead,
check the manual. You have to change some columns to TEXT or BLOBs

減小列的長(zhǎng)度至65,533或更低可以使創(chuàng)建表的操作成功。例如:

mysql> CREATE TABLE t2
       (c1 VARCHAR(65533) NOT NULL)
       ENGINE = InnoDB CHARACTER SET latin1;
Query OK, 0 rows affected (0.01 sec)

MyISAM變長(zhǎng)情況示例

對(duì)于MyISAM表,NULL列需要額外的空間來記錄它們的值是否為NULL。每個(gè)NULL列需要額外的一位,四舍五入到最近的字節(jié)。

創(chuàng)建表t3的語句失敗,因?yàn)镸yISAM除了需要為可變長(zhǎng)度列的長(zhǎng)度字節(jié)分配空間外,還需要為NULL列分配空間,導(dǎo)致行大小超過了65,535字節(jié):

mysql> CREATE TABLE t3
       (c1 VARCHAR(32765) NULL, c2 VARCHAR(32766) NULL)
       ENGINE = MyISAM CHARACTER SET latin1;
ERROR 1118 (42000): Row size too large. The maximum row size for the used
table type, not counting BLOBs, is 65535. This includes storage overhead,
check the manual. You have to change some columns to TEXT or BLOBs

行大小限制示例

InnoDB限制行大?。▽?duì)于存儲(chǔ)在數(shù)據(jù)庫頁面內(nèi)的本地?cái)?shù)據(jù))略小于4KB、8KB、16KB和32KB的innodb_page_size設(shè)置的一半,并且略小于64KB頁面的16KB。

以下是創(chuàng)建表t4的語句,由于定義的列超過了16KB InnoDB頁面的行大小限制,因此操作失敗:

mysql> CREATE TABLE t4 (
       c1 CHAR(255),c2 CHAR(255),c3 CHAR(255),
       c4 CHAR(255),c5 CHAR(255),c6 CHAR(255),
       c7 CHAR(255),c8 CHAR(255),c9 CHAR(255),
       c10 CHAR(255),c11 CHAR(255),c12 CHAR(255),
       c13 CHAR(255),c14 CHAR(255),c15 CHAR(255),
       c16 CHAR(255),c17 CHAR(255),c18 CHAR(255),
       c19 CHAR(255),c20 CHAR(255),c21 CHAR(255),
       c22 CHAR(255),c23 CHAR(255),c24 CHAR(255),
       c25 CHAR(255),c26 CHAR(255),c27 CHAR(255),
       c28 CHAR(255),c29 CHAR(255),c30 CHAR(255),
       c31 CHAR(255),c32 CHAR(255),c33 CHAR(255)
       ) ENGINE=InnoDB ROW_FORMAT=DYNAMIC DEFAULT CHARSET latin1;
ERROR 1118 (42000): Row size too large (> 8126). Changing some columns to TEXT or BLOB may help.
In current row format, BLOB prefix of 0 bytes is stored inline.

總結(jié) 

到此這篇關(guān)于MySQL表列數(shù)和行大小限制的文章就介紹到這了,更多相關(guān)MySQL表列數(shù)和行大小限制內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 簡(jiǎn)單了解MySQL union all與union的區(qū)別

    簡(jiǎn)單了解MySQL union all與union的區(qū)別

    這篇文章主要介紹了簡(jiǎn)單了解MySQL union all與union的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • MySQL數(shù)值類型溢出的處理方法

    MySQL數(shù)值類型溢出的處理方法

    這篇文章主要給大家介紹了關(guān)于MySQL數(shù)值類型溢出的處理方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用MySQL具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • 數(shù)據(jù)庫管理中19個(gè)MySQL優(yōu)化方法

    數(shù)據(jù)庫管理中19個(gè)MySQL優(yōu)化方法

    小編給大家總結(jié)了19條非常實(shí)用的MySQL數(shù)據(jù)庫優(yōu)化方法,這是每個(gè)服務(wù)器管理人員都必須知道的,一起學(xué)習(xí)下。
    2017-11-11
  • mysql中secure_file_priv=不生效問題及解決

    mysql中secure_file_priv=不生效問題及解決

    這篇文章主要介紹了mysql中secure_file_priv=不生效問題及解決方案,以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家,
    2024-01-01
  • MySQL創(chuàng)建表時(shí)字符串的默認(rèn)值問題

    MySQL創(chuàng)建表時(shí)字符串的默認(rèn)值問題

    這篇文章主要介紹了MySQL創(chuàng)建表時(shí)字符串的默認(rèn)值問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • MySQL count(1)、count(*)、count(字段)的區(qū)別

    MySQL count(1)、count(*)、count(字段)的區(qū)別

    COUNT在數(shù)據(jù)庫行數(shù)統(tǒng)計(jì)中被廣泛使用,那么你知道MySQL count(1)、count(*)、count(字段)的區(qū)別嗎,本文就想的介紹一下,感興趣的可以了解一下
    2021-12-12
  • MySQL中四種常見的備份表方式詳解

    MySQL中四種常見的備份表方式詳解

    MySQL備份是數(shù)據(jù)庫管理的核心環(huán)節(jié)之一,通過備份能夠有效地防止數(shù)據(jù)丟失,確保數(shù)據(jù)的安全和恢復(fù)能力,備份的方式多種多樣,本文給大家介紹了四種常見的MySQL備份表的方式,需要的朋友可以參考下
    2026-03-03
  • MySQL8.0.21安裝步驟及出現(xiàn)問題解決方案

    MySQL8.0.21安裝步驟及出現(xiàn)問題解決方案

    這篇文章主要介紹了MySQL8.0.21安裝步驟及出現(xiàn)問題解決方案,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • Mysql查詢時(shí)間區(qū)間日期列表實(shí)例代碼

    Mysql查詢時(shí)間區(qū)間日期列表實(shí)例代碼

    最近常用到mysql的日期范圍搜索,下面這篇文章主要給大家介紹了關(guān)于Mysql查詢時(shí)間區(qū)間日期列表的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04
  • 連接遠(yuǎn)程mysql數(shù)據(jù)庫失敗常見原因及解決方案

    連接遠(yuǎn)程mysql數(shù)據(jù)庫失敗常見原因及解決方案

    這篇文章主要介紹了連接遠(yuǎn)程mysql數(shù)據(jù)庫失敗常見原因及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07

最新評(píng)論

瓦房店市| 无为县| 内丘县| 盐亭县| 宜兰县| 布拖县| 扬州市| 平昌县| 台州市| 教育| 雅江县| 吕梁市| 麟游县| 阿瓦提县| 宾川县| 淮南市| 阳泉市| 高邮市| 青州市| 福海县| 睢宁县| 梁平县| 嘉祥县| 仲巴县| 上蔡县| 那曲县| 临城县| 丘北县| 左云县| 彭州市| 老河口市| 长春市| 灵璧县| 平湖市| 神木县| 浦江县| 扎兰屯市| 马山县| 马龙县| 女性| 遵义市|