国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

MySQL數據類型varchar詳解

2024-07-24 12:47:34
字體:
來源:轉載
供稿:網友
1、varchar(N)的邏輯意義
從MySQL4.1開始,varchar (N)中的N指的是該字段最多能存儲多少個字符(characters),不是字節數。
不管是一個中英文字符或者數字、或者一個漢字,都當做一個字符。在4.1之前,N表示的是最大存儲的字節數(bytes)。
2、varchar(N)到底能存多長的數據
在mysql reference manual上,varchar最多能存儲65535個字節的數據。varchar 的最大長度受限于最大行長度(max row size,65535bytes)。65535并不是一個很精確的上限,可以繼續縮小這個上限。65535個字節包括所有字段的長度,變長字段的長度標識(每個變長字段額外使用1或者2個字節記錄實際數據長度)、NULL標識位的累計。
NULL標識位,如果varchar字段定義中帶有default null允許列空,則需要需要1bit來標識,每8個bits的標識組成一個字段。一張表中存在N個varchar字段,那么需要(N+7)/8 (取整)bytes存儲所有的NULL標識位。
如果數據表只有一個varchar字段且該字段DEFAULT NULL,那么該varchar字段的最大長度為65532個字節,即65535-2-1=65532 bytes。
復制代碼 代碼如下:
CREATE TABLE `vchar1` (   `name` VARCHAR(65533)  NOT  NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE `vchar2` (   `name` VARCHAR(65533)  NOT  NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1;

如果數據表只有一個varchar字段且該字段NOT NULL,那么該varchar字段的最大長度為65533個字節,即65535-2=65533bytes。
復制代碼 代碼如下:
CREATE TABLE `vchar3` (   `name` VARCHAR(65532)  DEFAULT  NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE `vchar4` (   `name` VARCHAR(65532)  DEFAULT  NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1;

來個略微復雜點的表結構,->
復制代碼 代碼如下:
CREATE TABLE `tv` (
`a` VARCHAR(100) DEFAULT NULL,
`b` VARCHAR(100) DEFAULT NULL,
`c` VARCHAR(100) DEFAULT NULL,
`d` VARCHAR(100) DEFAULT NULL,
`e` VARCHAR(100) DEFAULT NULL,
`f` VARCHAR(100) DEFAULT NULL,
`g` VARCHAR(100) DEFAULT NULL,
`h` VARCHAR(100) DEFAULT NULL,
`i` VARCHAR(N) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1

`i` varchar(N) DEFAULT NULL中N最大值可以為多少?
這樣計算:已知確定的字段長度為100*8  bytes,8個varchar(100)字段總共需要變長字段表示字節為1*8=8 bytes。每個NULL字段用1bit標識,9個字段都是default null,那么需要用(9+7)/8bit = 2 bytes存儲NULL標識位。65535-100*8-1*8-2 = 64725 > 256, 那么字段i的最大長度為64725  - 2 =64723 bytes,即N=64723 。
varchar到底能存多少個字符?這與使用的字符集相關,latin1、gbk、utf8編碼存放一個字符分別需要占1、2、3個字節。
3、varchar物理存儲
在物理存儲上,varchar使用1到2個額外的字節表示實際存儲的字符串長度(bytes)。如果列的最大長度小于256個字節,用一個字節表示(標識)。如果最大長度大于等于256,使用兩個字節。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 惠州市| 开鲁县| 常山县| 宣威市| 湖口县| 阆中市| 温州市| 浦北县| 平遥县| 壤塘县| 双柏县| 灵寿县| 巴林左旗| 望都县| 恭城| 镇远县| 广东省| 招远市| 会宁县| 哈密市| 炎陵县| 东城区| 固始县| 三江| 孝感市| 灵寿县| 邢台县| 新巴尔虎右旗| 察雅县| 岐山县| 丰宁| 布尔津县| 富锦市| 乌兰察布市| 徐州市| 吉林省| 牟定县| 达尔| 集贤县| 榆中县| 顺义区|