MySQL支持的数据类型

2.1整值类型
【整数】
当加入zerofill参数的时候,会把数值前用0填充剩余的宽度,同时当设置了宽度限制之后,如果插入大于宽度限制的值,不会截断或插不进去报错
当选择属性UNSIGNED时,使参数属性的取值范围取值是正常值的下限为0,eg.tinyint有符号范围-128~~127,无符号范围是0-255,当一列制定为zerofill,则MySQL自动为该列添加UNSIGNED属性
【小数】浮点数float,double 定点数decimal
(M.D)表示该值一共M(精度)位数(整数+小数),小数位数未D(标度)
浮点数如果不写精度和标度,则会按照实际精度值显示,如果有精度和标度,则会自动将四舍五入后的数值插入;定点数如果不写精度和标度,则会按照默认值decimal(10,0)来进行操作,并且如果数据超过了精度和标度值,系统会进行报错,但是值还是会添加进去
【注:对于精确度较高的应用中要使用定点数而不是浮点数来保存数据,因为在使用单精度浮点数表示的时候会产生误差 P153】
【注:浮点数的比较最好使用范围比较而不是==比较,否则会产生误差; P154】
【关于浮点数与定点数的应用要注意:
1,浮点数存在误差问题;
2,对货币等精确到敏感的数据,应该用定点数表示或存储;
3,在编程中,如果用到浮点数,要特别注意误差问题,并尽量避免浮点数比较;
4,要注意浮点数中一些特殊值的处理; ****

2.2日期时间类型
timestamp的插入和查询都受当时时区的影响,而datetime只能反应出插入时当地的时区
2.3字符串类型
char和varchar的主要区别在于字符串的存储方式不同,char不可变,varchar可变,在检索时char删除了尾部的空格,varchar则保留这些空格
对于那些变换长度不大并且对于查询速度有比较高的要求的数据可以考虑使用char
对于不同的引擎来说:
MyISAM:建议使用固定长度的数据列代替可以长度的数据列
MEMORY:目前都是用固定长度的数据行处理,所以无论使用char还是varchar都是一样的,两者都是作为char类型的处理
InnoDB:建议使用varchar,对于InnoDB数据表,内部的行存储格式上没有区分固定长度和可变长度列(所有数据行都使用指向数据列值的头指针),因此在本质上使用固定长度char不一定比可变varchar的性能要好。因而主要性能因素是数据行使用的存储总量,由于char比varchar平均占用的空间要多于varchar,因此使用varchar是最小化需要处理的数据行的存储总量和磁盘的I/O是比较好的

 text与blob
      合成索引:根据大文本字段的内容来创建一个散列值,并把这个值存储在单独的数据列中,接下来就可以通过检索散列值找到数据行了;可以使用MD5()函数生成散列值,也可以使用SHA1()或者CRC32();合成的散列值如果尾部用空格,就不要存放在char或者vachar中,因为他们会把尾部的空格去掉;
      合成索引的使用:eg:
           添加:insert into user values(1,repeat('lgy',3),md5(context));
           查询:select * from hash_value=md5(repeat('lgy',3));
      但是这种技术只能用于精确匹配,如果要对blob或者clob进行模糊查询,mysql提供了前缀索引,也就是为字段的前n列创建索引
           eg:desc select * from user where context like 'lgy%' \G;
      %不能放在前面,否则索引不会被引用
      【注:】如果经常做删除和修改记录的操作,要定期执行OPTIMIZE TABLE功能对表进行随便处理
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值