MySQL8 全部類型

數字類型

日期類型

 

字符串類型

CHAR和VARCHAR

表列數和行大小限制

MySQL每個表的硬限制爲4096列,但對於給定的表,有效最大值可能更小。確切的列限制取決於幾個因素:

表的最大行大小限制列的數量(也可能是size),因爲所有列的總長度不能超過此大小。

各列的存儲要求限制了適合給定最大行大小的列數。某些數據類型的存儲要求取決於存儲引擎,存儲格式和字符集等因素。

存儲引擎可能會施加額外的限制來限制表列數。例如, InnoDB每個表的限制爲1017列。

即使存儲引擎能夠支持更大的行,MySQL表的內部限制最大行大小爲65,535字節。BLOB和TEXT列只對行大小限制貢獻9到12個字節,因爲它們的內容與行的其餘部分分開存儲。

InnoDB中對innodb_page_size(4KB,8KB,16KB和32KB)的設置,表的最大行大小略小於半頁。例如,對於默認的16KB InnoDB頁面大小,最大行大小略小於8KB 。

比如:

複製代碼

-- 此時最大行大小爲66000,大於規定的65535
CREATE TABLE `test_max_row_size` (
    a VARCHAR(10000),
    b VARCHAR(10000),
    c VARCHAR(10000),
    d VARCHAR(10000),
    e VARCHAR(10000),
    f VARCHAR(10000),
    g VARCHAR(6000)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
> 1118 - 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
> 時間: 0.004s

複製代碼

報錯是因爲最大行大小的限制是所有列共享,而不是對單獨列的限制。

BINARY和VARBINARY

 BLOB和TEXT

 ENUM和SET

複製代碼

-- SET類型,元素個數最大爲64個
CREATE TABLE `test_set` (
  a SET('a001','a002','a003','a004','a005','a006','a007','a008','a009','a0010','a0011','a0012','a0013','a0014','a0015','a0016','a0017','a0018','a0019','a0020','a0021','a0022','a0023','a0024','a0025','a0026','a0027','a0028','a0029','a0030','a0031','a0032','a0033','a0034','a0035','a0036','a0037','a0038','a0039','a0040','a0041','a0042','a0043','a0044','a0045','a0046','a0047','a0048','a0049','a0050','a0051','a0052','a0053','a0054','a0055','a0056','a0057','a0058','a0059','a0060','a0061','a0062','a0063','a0064')
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

複製代碼

測試一下這兩個類型

複製代碼

CREATE TABLE `test_enum_set` (
  a SET('A','B','C'),
  b ENUM('男','女')
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO test_enum_set VALUES('A,B','男')
> Affected rows: 1
> 時間: 0.009s

複製代碼

如果你插入的值不在set之列,報錯

INSERT INTO test_enum_set VALUES('D','男')
> 1265 - Data truncated for column 'a' at row 1
> 時間: 0s

如果你插入的值不在enum之列,也報錯

INSERT INTO test_enum_set VALUES('C','人妖')
> 1265 - Data truncated for column 'b' at row 1
> 時間: 0s

對於set而言,插入重複的會過濾掉,不然怎麼能叫set呢

INSERT INTO test_enum_set VALUES('A,A,A','女')
> Affected rows: 1
> 時間: 0.008s

數據類型存儲要求

數字類型前面已經提到了,這裏不再贅述。

時間類型

 枚舉和集合類型

 

如果你想要表格的文件,我已經打包好了:https://github.com/Mysakura/DataFiles

那個 .pos 文件可以導入https://www.processon.com/ 來查看

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章