mysql中数据类型的一些难点

一、int(4)什么意思?

      这里的4不表示存储长度,只有字段属性指定为unsigned zerofill时有用,即用零填充,当位数不足4位时会在前边用零填充,例:数据1会显示0001。如果字段属性不是unsigned zerofill,那么和int是没有区别的。

       如果是int(11),会是000 000 000 01。

       说明一下:int最大存储值 4 294 967 295,所有溢出的数字都会变成4 294 967 295。切记不能把手机号的书籍类型设为int(11),应该为char(11)。


二、varchar(20)最多能插入几个汉字?varchar(20)插入数据超出20字符怎么办?

       4.0版本以下,varchar(20),指的是20字节,如果存放UTF8汉字时,只能存6个(每个汉字3字节) 

       5.0版本以上,varchar(20),指的是20字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放20个

       如果插入的字符串长度超过了20字符,超出的部分会被裁剪。(mysql版本5.5.53),可能有版本超出会报错。


三、varchar(255)与varchar(80)有什么区别?

     首先肯定是255可以比80存的字符串更长,但是如果用着两种类型存储相同的长度的数据(>80),会有什么区别呢?  varchar(255)与varchar(80)都是保存可变的字符串,当使用ROW_FORMAT=FIXED创建MyISAM表时,会为每行使用固定的长度空间,这样设置不同的varchar长度值时,存储相同数据所占用的空间是不一样。(MySQL在内存中分配固定长度给字段长度)

       使用长度较短的列却有巨大的优势。较大的列使用更多的内存,因为MySQL通常会分配固定大小的内存块来保存值。这对排序或使用基于内存的临时表尤其不好。同样的事情也会发生在使用文件排序或者基于磁盘的临时表的时候。所以最好的策略就是只分配真正需要的空间。


四、char(10)和varchar(10)的区别?何时该用char,何时该用varchar?(来自网络)

       区别: 
       1.CHAR的长度是固定的,而VARCHAR2的长度是可以变化的, 比如,存储字符串“abc",对于CHAR(10),表示你存储的字符将占10个字节(包括7个空字符),而同样的VARCHAR(10)则只占用3个字节的长度,10只是最大值,当你存储的字符小于10时,按实际长度存储。 
       2.CHAR的效率比VARCHAR的效率稍高。 
       
        何时该用CHAR,何时该用varchar? 
       CHAR与VARCHAR是一对矛盾的统一体,两者是互补的关系. 
       VARCHAR比CHAR节省空间,在效率上比CHAR会稍微差一些,即要想获得效率,就必须牺牲一定的空间,这也就是我们在数据库设计上常说的‘以空间换效率’。 

       VARCHAR虽然比CHAR节省空间,但是如果一个VARCHAR列经常被修改,而且每次被修改的数据的长度不同,这会引起‘行迁移’(Row Migration)现象,而这造成多余的I/O,是数据库设计和调整中要尽力避免的,在这种情况下用CHAR代替VARCHAR会更好一些。


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值