解析MySQL数据类型 避免数据库设计出现混乱

数据库存储中的数据类型与大小各异。有些地方只存储数字类型,有些只存储文本类型,有些二者而兼之。而很多数据库支持各种专用类型:日期和时间类型,二进制字符类型以及布尔类型。

选择数据类型与数据相匹配是数据库设计中最为重要的部分,因为这种类型将会影响到RDBMS的效率与性能。所以,对RDBMS的数据类型选择应给予足够的重视。

这就是编写本文的主要目的。表A将列举了MySQL支持的绝大部分重要的数据类型,而MySQL是当前最为流行的免费RDBMS。文中还描述了何时与如何使用这些数据类型。这将有助于建立一个数据库的合理设计。

表 A

数据类型 描述 字节 推荐使用
SMALLINT 整数,从-32000到 +32000范围 2 存储相对比较小的整数。
比如: 年纪,数量
INT 整数,从-2000000000 到 +2000000000 范围 4 存储中等整数
例如: 距离
BIGINT 不能用SMALLINT 或 INT描述的超大整数。 8 存储超大的整数
例如: 科学/数学数据
FLOAT 单精度浮点型数据 4 存储小数数据
例如:测量,温度
DOUBLE 双精度浮点型数据 8 需要双精度存储的小数数据
例如:科学数据
DECIMAL 用户自定义精度的浮点型数据 变量;取决于精度与长度 以特别高的精度存储小数数据。
例如:货币数额,科学数据
CHAR 固定长度的字符串 特定字符串长度(高达255字符) 存储通常包含预定义字符串的变量
例如: 定期航线,国家或邮编
VARCHAR 具有最大限制的可变长度的字符串 变量; 1 + 实际字符串长度 (高达 255 字符) 存储不同长度的字符串值(高达一个特定的最大限度).
例如:名字,密码,短文标签
TEXT 没有最大长度限制的可变长度的字符串 Variable; 2 +聽 actual string length 存储大型文本数据
例如: 新闻故事,产品描述
BLOB 二进制字符串 变量;2 + 实际字符串长度 存储二进制数据
例如:图片,附件,二进制文档
DATE 以 yyyy-mm-dd格式的日期 3 存储日期
例如:生日,产品满期
TIME 以 hh:mm:ss格式的时间 3 存储时间或时间间隔
例如:报警声,两时间之间的间隔,任务开始/结束时间
DATETIME 以yyyy-mm-ddhh:mm:ss格式结合日期和时间 8 存储包含日期和时间的数据
例如:提醒的人,事件
TIMESTAMP 以yyyy-mm-ddhh:mm:ss格式结合日期和时间 4 记录即时时间
例如:事件提醒器,“最后进入”的时间标记
YEAR 以 yyyy格式的年份 1 存储年份
例如:毕业年,出生年
ENUM 一组数据,用户可从中选择其中一个 1或 2个字节 存储字符属性,只能从中选择之一
例如:布尔量选择,如性别
SET 一组数据,用户可从中选择其中0,1或更多。 从1到8字节;取决于设置的大小 存储字符属性,可从中选择多个字符的联合。
例如:多选项选择,比如业余爱好和兴趣。

对于一个完整的列表和详细描述,可以查看MySQL manual。你也可以阅读文章Choosing the Right Type for a Column。

时间: 2024-12-21 22:50:38

解析MySQL数据类型 避免数据库设计出现混乱的相关文章

MySQL题库管理数据库设计

问题描述 MySQL题库管理数据库设计 一个数据库,包含单选题.多选题.判断题.填空题四种题型,每种题型对应一个表,请问这个表的字段该如何设计才好?比如多选题的答案不定,答案属性应该如何设计?有没有这方面的样例供参考下,谢谢. 解决方案 8个字段,4个char表示4个题目,4个bool/bit字段,每个表示一个答案是否选择. 解决方案二: 甲表:5个字段,id(int)主键,A答案(int),B答案(int),C答案(int),D答案(int) abcd答案的内容用0表示没有,1表示有 乙表:3

解析MySQL的information_schema数据库_Mysql

information_schema数据库是在mysql的版本5.0之后产生的,一个虚拟数据库,物理上并不存在.information_schema数据库类似与"数据字典",提供了访问数据库元数据的方式,即数据的数据.比如数据库名或表名,列类型,访问权限(更加细化的访问方式). 其中重要的表有:SCHEMATA表---SCHEMATA表提供了当前mysql实例中所有数据库的信息.是show databases的结果取之此表.TABLES表---TABLES表提供了关于数据库中的表的信息

MySQL系列之一:数据库设计

前言 这里将以前不怎么熟悉的数据库设计知识重新拾起,做一个简单的知识梳理.之前一直认为数据库设计无非就是创建数据库.建表.添加字段.确定字段类型(这点随意性很大),诸如此类.当系统地对数据库知识重新学习的时候才发现数据库设计也有一套类似软件开发流程的规范,并且每一个步骤都是有不同的侧重点的. 数据库设计的概念 简单来说,数据库设计就是对需求进行分析.逻辑设计.物理设计以及维护和优化的过程.可以看到,数据库设计不仅仅体现在软件开发过程中,还体现在软件后期的维护上.(时间周期) 这里的软件需求分析与

使用Erwin进行基于MySQL的数据库设计

ERwin是常用的进行数据库设计的工具,支持众多的数据库,可惜不支持MYSQL,大概是因为很少有企业用到MYSQL吧,但是MYSQL实际上还是很优秀的. 为了能够使用ERWIN能够进行基于MYSQL数据库的物理设计,可以采用以下方法步骤: (假定你已经有了一个设计好的LOGICAL MODEL) 1.安装MYSQL的ODBC DRIVER,可以去MYSQL.COM,有链接可以下载. 2.在ODBC的管理程序中建立一个连接你的MYSQL数据库的USER DSN. 3.从已建立好的LOGICAL M

MySQL 第七篇:数据库设计、视图与触发器

我把MySQL的内容整理成9篇博客,学完这9篇博客虽不能说能成为大神,但是应付一般中小企业的开发已经足够了,有疑问或建议的欢迎留言讨论. 数据库设计 为了建立冗余较小.结构合理的数据库,设计数据库时必须遵循一定的规则.在关系型数据库中这种规则就称为范式.范式是符合某一种设计要求的总结.要想设计一个结构合理的关系型数据库,必须满足一定的范式.现在对数据库设计范式要求不高,了解即可. 一.第一范式:确保每列的原子性. 如果每列(或者每个属性)都是不可再分的最小数据单元(也称为最小的原子单元),则满足

php+mysql商城数据库设计问题

问题描述 php+mysql商城数据库设计问题 需要为每个用户都建立一张表来存储他的购买记录吗,这样至少会有上千张表. 如果用一张表来存放所有用户的购买记录那么表又有好多条数据. 到底哪个查找好一点呢? 解决方案 不用的,你在给用户一个商品id,购买商品的id,然后到对应商品库查就可以了.当用户点击购买后就将这个商品的id保存到用户表就可以了 解决方案二: 用用户id以及商品id来生成一个表.或者用mingodb灯nosql数据库,比较好描述这种关系 解决方案三: 肯定是第二种,用一张表来存放所

mysql数据库设计,大神帮帮忙

问题描述 mysql数据库设计,大神帮帮忙 解决方案 画一个界面就能得到苦力给你设计?要是真那么好,我还想画个航母呢. 解决方案二: mysql数据库设计-多对多Mysql数据库设计MYSQL数据库设计(一) 解决方案三: 一个用户id 然后各个账户做各个列 解决方案四: 一个用户表 一个积分表 一个账户表 一个订单表

DB2面向OLTP环境的物理数据库设计:数据类型

为一个数据库设计表,这涉及到选择一个合适的http://www.aliyun.com/zixun/aggregation/14208.html">数据模型和数据类型.数据类型是一个列属性定义,它指示了应该将什么类型的数据存储在一个表列中. 根据所存储的数据的性质小心选择正确的数据类型,这有助于最大限度地减少存储需求. 最大限度地减少数据行消耗的空间,这有助于将更多行放在一个数据页面中.如果一个数据页面中有更多的行,那么这样可以提高缓冲池命中率,减少 I/O 成本,并实现更好的查询性能.DB

MySQL 数据库设计复习笔记及项目实战_Mysql

作者:杨鑫奇 最近手头上有3个项目开动,其他2个都是从底层开始的,一个已经开始了一段时间的了,在小城市小团队开发的条件下,都没有专门的DBA来做数据库的设计和维护,往往都是开发人员顶上,可是看了很多的数据库的设计,感觉很多设计都不是很完美,包括DZ的Ucenter和UcenterHome的数据库,所以这段时间话了近5个小时的时间好好的整理了下数据库方面的基本内容,配合现有的框架来实现快捷的数据库设计,来满足目前项目的需求 参考的数据库文档主要有:目前国内的常见的PHP系统的数据库 DZ6.0的数