提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
提示:以下是本篇文章正文内容,下面案例可供参考
一、mysql中 char 和 varchar
1.区别
1.长度是否可变
char:固定长度 varchar:可变长度
2.存储长度
char:最大为255个字符 varchar:最大为65535个字符
3.检索效率
char查找效率高 varchar 查找效率低
2.各自优点
1.优点:
char:固定长度,存取速度比varchar快,方便程序的存储与查找。
varchar:长度可变,当存入一个varchar(10)然而只存入了四个字符,此时varchar会直接将字符记录的长度变为4,节省空间。
2.缺点
char:空间换时间
varchar:时间换空间
char的存储方式是对英文字符(ASCII)占用一个字节,对一个汉字占用两个字节;而varchar都是两个字节,两者的存储数据都非unicode的字符数据。
3.适应情况
char:
1.适合存储很短的字符串,或者所有值都接近同一个长度
2.对于经常变更的数据,定长的char不容易产生碎片
3.对于非常短的列,char在存储空间上也更有效率,例如char(1)来存储只有Y和N的值,只需要一个字节,但是varchar需要两个
varchar:
1.用于存储可变长字符串,比定长类型更节省空间。
2.节省了存储空间,对性能也有帮助
1、对于MyISAM表,尽量使用Char,对于那些经常需要修改而容易形成碎片的myisam和isam数据表就更是如此,它的缺点就是占用磁盘空间;
2、对于InnoDB表,因为它的数据行内部存储格式对固定长度的数据行和可变长度的数据行不加区分(所有数据行共用一个表头部分,这个标头部分存放着指向各有关数据列的指针),所以使用char类型不见得会比使用varchar类型好。事实上,因为char类型通常要比varchar类型占用更多的空间,所以从减少空间占用量和减少磁盘i/o的角度,使用varchar类型反而更有利;
3、存储很短的信息,比如门牌号码101,201……这样很短的信息应该用char,因为varchar还要占个byte用于存储信息长度,本来打算节约存储的现在得不偿失。
4、固定长度的。比如使用uuid作为主键,那用char应该更合适。因为他固定长度,varchar动态根据长度的特性就消失了,而且还要占个长度信息。
5、十分频繁改变的column。因为varchar每次存储都要有额外的计算,得到长度等工作,如果一个非常频繁改变的,那就要有很多的精力用于计算,而这些对于char来说是不需要的。
二、mysql blob和text区别
1、主要差别
TEXT与BLOB的主要差别就是BLOB保存二进制数据,TEXT保存字符数据。目前几乎所有博客内容里的图片都不是以二进制存储在数据库的,而是把图片上传到服务器然后正文里使用标签引用,这样的博客就可以使用TEXT类型。而BLOB就可以把图片换算成二进制保存到数据库中。
2、类型区别
BLOB有4种类型:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。它们只是可容纳值的最大长度不同。
TEXT也有4种类型:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT。这些类型同BLOB类型一样,有相同的最大长度和存储需求。
3、字符集
BLOB列没有字符集,并且排序和比较基于列值字节的数值值。TEXT列有一个字符集,并且根据字符集的校对规则对值进行排序和比较
4、大小写
在TEXT或BLOB列的存储或检索过程中,不存在大小写转换,都一样!
5、严格模式
运行在非严格模式时,如果你为BLOB或TEXT列分配一个超过该列类型的最大长度的值值,值被截取以保证适合。如果截掉的字符不是空格,将会产生一条警告。使用严格SQL模式,会产生错误,并且值将被拒绝而不是截取并给出警告。