mysql创建数据库字段类型_建立mysql数据库字段类型的选择【转】

现 在很多人开发网站使用的程序是PHP+mysql,在建立数据库的时候,不仅要考虑到数据库字段的全面性,我们还要考虑到表的字段类型设置的合理性,因为 一个数据库对表的设计没有要求的话,会很浪费数据库的,当然如果你说你的数据库足够大,那你对字段的设置也需要了解一些内容,它可以让你更灵活的写程序。

其实,我以前也没怎么注意过数据库字段的设置,遵循一套老办法,是数字类型的就用int类型,是字符串类型的就用varchar类型,是文本的就用text类型,呵呵,当今天在CSDN上看到一个问题,让我对字段类型的选择又有了重新的定义。

CSDN上的问题是这样的:

在数据库里记录时间,是用datetime好还是用时间戳好?

我第一反应就是datetime是什么类型?我知道时间戳是一串数字,可以用php函数对这串数字处理,来变成各样的时间类型,比如2011-06-20或者06/20/2011等。对已datetime真的很陌生,只有请教下google了。

网络的解释是这样的:

个日期和时间组合。支持的范围是’1000-01-01 00:00:00′到’9999-12-31

23:59:59′。MySQL以’YYYY-MM-DD

HH:MM:SS’格式来显示DATETIME值,但是允许你使用字符串或数字把值赋给DATETIME的列。

对于上面的问题,CSDN论坛上面的又一个网友的回答我感觉还是蛮好的:

“如果你不打算将你的程序用于其他数据库的话,用 datetime 好。

这样可以方便的使用数据库提供的丰富的日期时间函数

否则用 int 类型保存 unix 时间戳比较好。

因为各种数据库提供的日期时间函数是不同的,很难在 sql 指令中协调起来

对于日期时间的计算只能借助 php 了”

对于datetime类型的数据可以用sql函数处理,我也没去探究,我知道的sql函数少之又少,如果大家想搞的更明白还是亲自建个数据库试试。

在这里我们探讨的是怎么设置字段类型,时间类型的我们说过了,我们就说说其他类型,比如我建一个班的学生数据库表。首先这个表应该包括以下这些字段

id 学生的id 这个设为主键

name 学生的姓名

sex 学生的性别

ok,现在我们就来探讨下,id的类型,因为这是一个数字类型,我们会想到int,但是有没有更好的呢?可能你对smallint tinyint 等其他的类型不熟悉,我们还是先看下网了解释

TINYINT[(M)] [UNSIGNED] [ZEROFILL]

一个很小的整数。有符号的范围是-128到127,无符号的范围是0到255。

SMALLINT[(M)] [UNSIGNED] [ZEROFILL]

一个小整数。有符号的范围是-32768到32767,无符号的范围是0到65535。

MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL]

一个中等大小整数。有符号的范围是-8388608到8388607,无符号的范围是0到16777215。

INT[(M)] [UNSIGNED] [ZEROFILL]

一个正常大小整数。有符号的范围是-2147483648到2147483647,无符号的范围是0到4294967295。

看到上面的这些内容,我们是否会考虑使用tinyint呢,因为一个班人数不会超过100人,如果使用int不是大材小用嘛!

所以,我们熟悉这些类型的范围后可能会设计出更合理的类型。当然你也可以使用int(3),MEDIUMINT(3)等都可以。

另外要说的是,name类型,一般我们会使用varchar类型,varchar类型会根据你字符串的大小自动扩张和收缩,看样子不错,但是什么时候使用char类型呢?在这里给大家推荐一篇文章 “varchar和char之争”相信读完这篇文章大家可能会对varchar和char的使用更加明确。

关于更多的类型使用,还是需要大家在项目中多多总结得来的,另外不要忘了查看下mysql手册哦。

转自:http://www.phperblog.net/?p=125

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值