mysql数据类型分析_mysql数据类型选择分析

1 char varchar text的选择

原则,最通用的并不是最适合的。

因为更改数据类型会耗费很长的时候,在定义的时候需要谨慎

例如存放密码的MD5加密数据,那么我们就绝对用char(32) 因为char使用固定的block,具有更快的偏移速度。例如存放用户名这样的数据,长的用户名最多也就25位吧,短的也3位以上,相差不大,我们也用char

但如评论这些,就建议用varchar,以免浪费磁盘空间。一般的评论都不会多于 255个单位字,那些神奇的长评论超出字数让他们分开两贴评论吧。

文章内容建议用text了,因为它很多时候超过255字节了。

ps:有些引擎不支持text 如 memory

2 varchar(255)和varchar(5)的选择

原则:慷慨不是程序员的美德.

在改变数据长度限制是非常轻松的,不会造成长时间耗费,因此能小则小,在发现不够用时候再按需要增大。

对于磁盘来说,varchar(255)和varchar(5)存放‘joffe’数据块占用的大小是一样的,但更大的数据类型大小却带来更大的内存占用。

另外说明一点,这个数字是表示最大字数,不是字节数 在utf-8下1就代表3字节,GBK下1就代表2字节。

3 int(10)与datetime类型的选择

原则:平衡开发速度与机器性能。

我更倾向于int(10)UNSIGNED,因为它方便。但对于数据库来说,int(10)占用的空间和内存都比datatime稍微大。 int(10)可以直接存放linux时间戳 在php里面直接time()就可以,而且可以根据需求用date()函数格式成任何自己喜欢的输出形式。不过从数据库的角度,datetime更节约机器资。

补充说明一下 int(1)和int(11)占用的磁盘空间都是一样的

4尽量NOT NULL

原则:色即是空,空即使色,人不要太色,数据不能太空。

null 的话 其实会在每个数据都加上了1bit的标记。如果char varchar text等 建议用”来做默认而Not Null ,int tinyint等 建议用0做默认而Not Null

5、用int类型存放IP

原则:看清事实本质类型。

有些人用varchar(15)来放,这实在是浪费的,IP本来就是整数,32bit的整数 int(10)存放也就不错。我也见过有人用char(4)存放,把ASCII码全用上了,这种极致的追求也相当不错,不过mysql提供inet_aton()和inet_ntoa转换ip和int类型,而php也有ip2long和long2ip,从开发角度来说,还是建议用int(10),另外说一句,char的大小是跟编码有关系,在国内用char(4)反而增大了机器负担。当然我更建议用php的 ip2long()和long2ip() 顺带说提提ip2long有个bug–ip比较大时候就会变负数,解决方法是先转二进制再转回10进 — bindec( decbin( ip2long( ‘IP地址’ ) ) );

6.char(0) Null 与tinyInt(1)模拟boolen之间争夺

原则:过犹不及,请避免麻烦。

本来char(0) Null 是模拟boolen最好的,因为只有‘’和NULL两种可能,在机器性能方面达到极致!但可恶的PHP是弱类型,在NULL和”之间有很多共通点,一不小心就中招了,在判断方面引来很多麻烦,现在写php的大多是团队合作,某人不中招不代表人人不中。因此为了避免麻烦 还是推荐用tinyInt(1),这个也是mysql推荐的做法。char(0) Null 这就是单方面追求性能而导致麻烦。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值