MySQL中的CHAR和VARCHAR到底支持多長?

最近在研究MySQL的數據類型,咱們知道,選擇合適的數據類型和數據長度對MySQL的性能影響是不可忽視的,小字段意味着能夠MySQL能夠讀取更多的記錄,從而加快查詢速度。sql

網上該問題的答案有不少版本,仍是經過實踐得出的結論比較靠譜。性能

先說結論(MySQL版本5.7.27)spa

  • CHAR最大255字符,字符集對CHAR沒有影響,CHAR()括號內填寫最大字符數255
  • VARCHAR最大65535字節,字符集對VARCHAR有影響code

    • UTF8字符集,每一個字符大小3字節,因此65535/3 = 21845,最大支持21845字符,所以VARCHAR()括號中最大填寫21845字符
    • GBK字符集,每一個字符大小2字節,因此65535/2 = 32767.5,最大支持32767字符,所以VARCHAR()括號中最大填寫32767字符

驗證過程

CHAR

UTF8字符集(1個字符佔用3個字節)ci

CREATE TABLE `test`.`demo`  (
  `id` int(0) UNSIGNED NULL AUTO_INCREMENT,
  `title` char(256) NULL,
  PRIMARY KEY (`id`)
) CHARACTER SET = utf8 COLLATE = utf8_general_ci;

MySQL提示錯誤rem

1074 - Column length too big for column 'title' (max = 255); use BLOB or TEXT instead

GBK字符集(1個字符佔用2個字節)get

CREATE TABLE `test`.`demo`  (
  `id` int(0) UNSIGNED NULL AUTO_INCREMENT,
  `title` char(256) NULL,
  PRIMARY KEY (`id`)
) CHARACTER SET = gbk COLLATE = gbk_chinese_ci;

MySQL提示錯誤it

1074 - Column length too big for column 'title' (max = 255); use BLOB or TEXT instead
結論:CHAR最大長度和字符集沒有關係,所以CHAR()括號內填寫字符大小,最終數據的字節大小隨着字符集不一樣而不一樣

VARCHAR

UTF8字符集(1個字符佔用3個字節)class

CREATE TABLE `test`.`demo`  (
  `id` int(0) UNSIGNED NULL AUTO_INCREMENT,
  `title` varchar(65535) NULL,
  PRIMARY KEY (`id`)
) CHARACTER SET = utf8 COLLATE = utf8_general_ci;

MySQL提示錯誤test

1074 - Column length too big for column 'title' (max = 21845); use BLOB or TEXT instead

MySQL提示的最大長度爲21845,經過UTF8字符集的大小可知VARCHAR()括號中指的是字符大小。

UTF8MB4字符集(1個字符佔用4個字節)

CREATE TABLE `test`.`demo`  (
  `id` int(0) UNSIGNED NULL AUTO_INCREMENT,
  `title` varchar(65535) NULL,
  PRIMARY KEY (`id`)
) CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci;

MySQL提示錯誤

1074 - Column length too big for column 'title' (max = 16383); use BLOB or TEXT instead

MySQL提示的最大長度爲16383,經過UTF8MB4字符集大小可知VARCHAR()括號中指的是字符大小。

0.jpeg
更多原創文章,盡在天天進步一點點

相關文章
相關標籤/搜索