① char 和 varchar
char 是固定长度
varchar 是变长
char的查询结果会忽略末尾的空格,varchar不会 char是定长,故查询速度比varchar快
②text 和blob
在保存少量字符串时会使用char 或varchar 但是在保存大量字符时用text或blob
text 只能保存字符数据,比如文章或日记
blob除了保存字符外还可以保存二进制数据,比如照片
存在问题:a 在执行大量的删除操作时,会影响其性能
删除操作会在数据表中留下大量的空洞,以后填入这些空洞的记录在插入的性能上会有影响,为了提高性能,需要定期使用optimize table对碎片进行整理
b 可以使用合成索引来提高查询性能
create table t (id int,contex blob,hash_value varchar(40));
insert into t values(1,repeat('aabbcc',2),md5(contex));//md5()是一个加密 函数,在这里用于生成散列值
select * from t where hash_value=md5(repeat('aabbcc',2))
只适用于精确匹配
c 将blob 和text 列分离到单独的表中
浮点数和定点数
浮点数用于表示存在小数部分的数值,如果插入的数据的精度超过定义的实际精度,则插入值会被四舍五入到实际定义的精度值,在四舍五入过程中不会报错
定点数保存成字符串形式,当插入的数值的精度大于实际的精度时会报错或警告