标签:
char(m) 定长字符串类型 非 Unicode 字符
varchar(m) 变长字符串类型 非 Unicode 数据
说明:M为最大可存储字节数 汉子占两个字节,通过指定m,来限制存储的最大字符数长度,char(20)和varchar(20)将最多只能存储20个字符,超过的字符将会被截掉。m必须小于该类型允许的最大字符数。
一 char(m)类型
Char(m) 最大字节数255 定长类型 m可取0-255 它的右边填充空格以达到指定长度,当检索到char值时,尾部的空格被删除掉 (性别 密码)
CHAR 类型用于定长字符串,并且必须在圆括号内用一个大小修饰符来定义。这个大小修饰符的范围从 0-255。
注意:比指定长度大的值将被截短,而比指定长度小的值将会用空格作填补。所以char类型存储的字符串末尾不能有空格,varchar不受此限制。
二 varchar(m)类型
Varchar(m) 最大字节65535 可变长度 m取0-65535 只保存需要字符数,另加一个字节来声明长度 (用户名 文章标题)
VARCHAR 类型只使用存储字符串实际需要的长度(增加一个额外字节来存储字符串本身的长度)来存储值。比指定长度大的值将被截短。
三 区别:
@1.内部存储机制:
char是固定长度,char(4)不管是存一个字符,2个字符或者4个字符(英文的),都将占用4个字节,不够的用空格补齐
varchar是存入的实际字符数+1个字节(n<=255)或2个字节(n>255),所以varchar(4),存入一个字符将占用2个字节,2个字符占用3个字节,4个字符占用5个字节。
@2.char类型的字符串检索速度要比varchar类型的快
@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中用来判断是否需要进行对据列类型转换的规则
1、在一个数据表里,如果每一个数据列的长度都是固定的,那么每一个数据行的长度也将是固定的.
2、只要数据表里有一个数据列的长度的可变的,那么各数据行的长度都是可变的.
3、如果某个数据表里的数据行的长度是可变的,那么,为了节约存储空间,MySQL会把这个数据表里的固定长度类型的数据列转换为相应的可变长度类型.
例外:长度小于4个字符的char数据列不会被转换为varchar类型
支持多语言的站点应考虑使用 Unicode nchar 或 nvarchar 数据类型以尽量减少字符转换问题
mysql数据类型——字符串char(m)和varchar(m)
标签:
原文地址:http://www.cnblogs.com/jiechn/p/4453346.html