計算:表中varchar類型的字段能容納的最大字符數?


建表語句:

CREATE TABLE `test2` (
    `id` int unsigned NOT NULL AUTO_INCREMENT,
    `content` varchar(21842) NOT NULL DEFAULT '',
    PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;

該表中varchar類型的字段能容納的最大字符數21842是怎么得來的?
21842 = (65535-1-2-4)/3
MySQL 要求一個行的定義長度不能超過65535個字節(包括多個字段),所以有65535.
varchar的最大有效長度取決於最大行大小.
減1的原因是實際行的存儲從第2個字節開始.
減2的原因是varchar頭部的2個字節表示長度.
減4的原因是字段id的int類型占用4個字節.
除以3的原因是一個utf8字符占用3個字節.

如果你在test2表里把varchar(21842)改為varchar(21844),那么就會報以下錯誤:

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.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM