mysql数据类型——字符串char(m)和varchar(m)

mysql数据类型——字符串char(m)和varchar(m)
mysql


char(m)     定长字符串类型  非 Unicode 字符
varchar(m)   变长字符串类型  非 Unicode 数据

算法

说明:M为最大可存储字节数 汉子占两个字节,经过指定m,来限制存储的最大字符数长度,char(20)和varchar(20)将最多只能存储20个字符,超过的字符将会被截掉。m必须小于该类型容许的最大字符数。
sql


一 char(m)类型
Char(m)   最大字节数255    定长类型  m可取0-255 它的右边填充空格以达到指定长度,当检索到char值时,尾部的空格被删除掉        (性别 密码)
  CHAR 类型用于定长字符串,而且必须在圆括号内用一个大小修饰符来定义。这个大小修饰符的范围从 0-255。
注意:比指定长度大的值将被截短,而比指定长度小的值将会用空格做填补。因此char类型存储的字符串末尾不能有空格,varchar不受此限制。
数据库


二 varchar(m)类型
Varchar(m) 最大字节65535 可变长度  m取0-65535 只保存须要字符数,另加一个字节来声明长度                                               (用户名 文章标题)
  VARCHAR 类型只使用存储字符串实际须要的长度(增长一个额外字节来存储字符串自己的长度)来存储值。比指定长度大的值将被截短。
数据结构

变化一
  MySQL 数据库的varchar类型在4.1如下的版本中的最大长度限制为255,其数据范围能够是0~255或1~255(根据不一样版本数据库来定)。
  在 MySQL5.0以上的版本中,varchar数据类型的长度支持到了65535,也就是说能够存放65532个字节的数据,起始位和结束位占去了3个字 节,
  也就是说,在4.1或如下版本中须要使用固定的TEXT或BLOB格式存放的数据可使用可变长的varchar来存放,这样就能有效的减小数据库文件的大小。

ide


变化二
MySQL 数据库的varchar类型在4.1如下的版本中,nvarchar(存储的是Unicode数据类型的字符)无论是一个字符仍是一个汉字,都存为2个字节 ,通常用做中文或者其余语言输入,这样不容易乱码 ;
  varchar: 汉字是2个字节,其余字符存为1个字节 ,varchar适合输入英文和数字。
4.0版本如下,varchar(20),指的是20字节,若是存放UTF8汉字时,只能存6个(每一个汉字3字节) ;
5.0版本以上,varchar(20),指的是20字符,不管存放的是数字、字母仍是UTF8汉字(每一个汉字3字节),均可以存放20个,最大大小是65532字节 ;
varchar(20)在Mysql4中最大也不过是20个字节,可是Mysql5根据编码不一样,存储大小也不一样,具体有如下规则:
性能

a) 存储限制
varchar 字段是将实际内容单独存储在聚簇索引以外,内容开头用1到2个字节表示实际长度(长度超过255时须要2个字节),所以最大长度不能超过65535。
b) 编码长度限制
字符类型若为gbk,每一个字符最多占2个字节,最大长度不能超过32766;
字符类型若为utf8,每一个字符最多占3个字节,最大长度不能超过21845。
若定义的时候超过上述限制,则varchar字段会被强行转为text类型,并产生warning。
c) 行长度限制
致使实际应用中varchar长度限制的是一个行定义的长度。 MySQL要求一个行的定义长度不能超过65535。若定义的表长度超过这个值,则提示
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOBs。
大数据


三 区别:
1.内部存储机制:  
  char是固定长度,char(4)无论是存一个字符,2个字符或者4个字符(英文的),都将占用4个字节,不够的用空格补齐
  varchar是存入的实际字符数+1个字节(n<=255)或2个字节(n>255),因此varchar(4),存入一个字符将占用2个字节,2个字符占用3个字节,4个字符占用5个字节。
编码

2.char类型的字符串检索速度要比varchar类型的快
spa

3.类型的选择
  文字字段若长度固定,如:身分证号码,就不要用 varchar 或 nvarchar,应该用 char 或 nchar。
  文字字段若长度不固定,如:地址,则该用 varchar 或 nvarchar。除了可节省存储空间外,存取硬盘时也会较有效率。

4性能选择
  (1) varchar类型在更新环节上的系统开销是远大于char类型的,因此char适合字段频繁更新时的应用。
  (2) varchar更节省磁盘空间
  (3) 大数据量提取时varchar的磁盘IO消耗更低,意味着varchar综合查询性能会更好,因此实际应用中大数据量(多行)查询返回,varchar的查询性能比起char来要好出很多
  (4)选择char和varchar会改变总体数据结构的算法以及存储方式。在mysql应用中,如已存在varchar字段,那么其它全部的char字段将以varchar方式存储。


在MySQL中用来判断是否须要进行对据列类型转换的规则

  一、在一个数据表里,若是每个数据列的长度都是固定的,那么每个数据行的长度也将是固定的.
   二、只要数据表里有一个数据列的长度的可变的,那么各数据行的长度都是可变的.
   三、若是某个数据表里的数据行的长度是可变的,那么,为了节约存储空间,MySQL会把这个数据表里的固定长度类型的数据列转换为相应的可变长度类型.
例外:长度小于4个字符的char数据列不会被转换为varchar类型
支持多语言的站点应考虑使用 Unicode nchar 或 nvarchar 数据类型以尽可能减小字符转换问题
 


效率来讲基本是char>varchar>text,可是若是使用的是Innodb引擎的话,推荐使用varchar代替charchar和varchar能够有默认值,text不能指定默认值

相关文章
相关标签/搜索