首页 | 资讯动态 | linux基础 | 系统管理 | 网络管理 | 编程开发 | linux数据库 | 服务器技术 | linux相关 | linux认证 | 嵌入式 | 下载中心 | 专题 | linux招聘 | 镜像站
OKLinux中文技术站
·设为首页
·加入收藏
·联系我们
系统管理: 中文环境 系统管理 桌面应用 内核技术 | Linux基础: 基础入门 安装配置 常用命令 经验技巧 软件应用 | Linux数据库: Mysql Postgre Oracle DB2 Sybase other
网络管理: 网络安全 网络应用 Linux服务器 环境配置 黑客安全 | 编程开发: PHP CC++ Python Perl Shell 嵌入式开发 java jsp | PHP技术: PHP基础 PHP技巧 PHP应用 PHP文摘
Linux资讯 Linux招聘 Linux专题 Apache | Linux相关: 硬件相关 Linux解决方案 Linux认证 企业应用 其它Unix | 相关下载: 资料下载 参考手册 开发工具 服务器类 软路由 其它
 技术搜索:
会员中心 注册会员 高级搜索  
  → 当前位置:首页>linux数据库>mysql>正文

MySQL的数字类型以及建库策略

http://www.oklinux.cn  2008-01-08  来源: oklinux收集   会员收藏  游客收藏  【 】 

一、数字类型

所谓的“数字类”,就是指 DECIMAL 和 NUMERIC,它们是同一种类型。它严格的说不是一种数字类型,因为他们实际上是将数字以字符串形式保存的;他的值的每一位 (包括小数点) 占一个字节的存储空间,因此这种类型耗费空间比较大。但是它的一个突出的优点是小数的位数固定,在运算中不会“失真”,所以比较适合用于“价格”、“金额”这样对精度要求不高但准确度要求非常高的字段。



小数类,即浮点数类型,根据精度的不同,有 FLOAT 和 DOUBLE 两种。它们的优势是精确度,FLOAT 可以表示绝对值非常小、小到约 1.17E-38 (0.000...0117,小数点后面有 37 个零) 的小数,而 DOUBLE 更是可以表示绝对值小到约 2.22E-308 (0.000...0222,小数点后面有 307 个零) 的小数。FLOAT 类型和 DOUBLE 类型占用存储空间分别是 4 字节和 8 字节。假如需要用到小数的字段,精度要求不高的,当然用 FLOAT 了。可是说句实在话,我们“民用”的数据,哪有要求精度那么高的呢?这两种类型至今我没有用过――我还没有碰到适合于使用它们的事例。



用的最多的,最值得精打细算的,是整数类型。从只占一个字节存储空间的 TINYINT 到占 8 个字节的 BIGINT,挑选一个“够用”并且占用存储空间最小的类型是设计数据库时应该考虑的。TINYINT、SMALLINT、MEDIUMINT、INT 和 BIGINT 占用存储空间分别为 1 字节、2 字节、3 字节、4 字节和 8 字节,就无符号的整数而言,这些类型能表示的最大整数分别为 255、65535、16777215、4294967295 和 18446744073709551615。假如用来保存用户的年龄 (举例来说,数据库中保存年龄是不可取的),用 TINYINT 就够了;九城的《纵横》里,各项技能值,用 SMALLINT 也够了;假如要用作一个肯定不会超过 16000000 行的表的 AUTO_INCREMENT 的 IDENTIFY 字段,当然用 MEDIUMINT 不用 INT,试想,每行节约一个字节,16000000 行可以节约 10 兆多呢。



二、日期时间类型



日期和时间类型比较简单,无非是 DATE、TIME、DATETIME、TIMESTAMP 和 YEAR 等几个类型。只对日期敏感,而对时间没有要求的字段,就用 DATE 而不用 DATETIME 是不用说的了;单独使用时间的情况也时有发生――使用 TIME;但最多用到的还是用 DATETIME。在日期时间类型上没有什么文章可做,这里就不再详述。



三、字符 (串) 类型



不要以为字符类型就是 CHAR,CHAR 和 VARCHAR 的区别在于 CHAR 是固定长度,只要你定义一个字段是 CHAR(10),那么不论你存储的数据是否达到了 10 个字节,它都要占去 10 个字节的空间;而 VARCHAR 则是可变长度的,假如一个字段可能的值是不固定长度的,我们只知道它不可能超过 10 个字符,把它定义为 VARCHAR(10) 是最合算的,VARCHAR 类型的占用空间是它的值的实际长度 1。为什么要 1 呢?这一个字节用于保存实际使用了多大的长度。从这个 1 中也应该看到,假如一个字段,它的可能值最长是 10 个字符,而多数情况下也就是用到了 10 个字符时,用 VARCHAR 就不合算了:因为在多数情况下,实际占用空间是 11 个字节,比用 CHAR(10) 还多占用一个字节。



举个例子,就是一个存储股票名称和代码的表,股票名称绝大部分是四个字的,即 8 个字节;股票代码,上海的是六位数字,深圳的是四位数字。这些都是固定长度的,股票名称当然要用 CHAR(8);股票代码虽然是不固定长度,但假如使用 VARCHAR(6),一个深圳的股票代码实际占用空间是 5 个字节,而一个上海的股票代码要占用 7 个字节!考虑到上海的股票数目比深圳的多,那么用 VARCHAR(6) 就不如 CHAR(6) 合算了。



虽然一个 CHAR 或 VARCHAR 的最大长度可以到 255,我认为大于 20 的 CHAR 是几乎用不到的――很少有大于 20 个字节长度的固定长度的东东吧?不是固定长度的就用 VARCHAR。大于 100 的 VARCHAR 也是几乎用不到的――比这更大的用 TEXT 就好了。TINYTEXT,最大长度为 255,占用空间也是实际长度 1;TEXT,最大长度 65535,占用空间是实际长度 2;MEDIUMTEXT,最大长度 16777215,占用空间是实际长度 3;LONGTEXT,最大长度 4294967295,占用空间是实际长度 4。为什么 1、 2、 3、 4?你要是还不知道就该打 PP 了。这些可以用在论坛啊、新闻啊,什么的,用来保存文章的正文。根据实际情况的不同,选择从小到大的不同类型。



四、枚举和集合类型



枚举 (ENUM) 类型,最多可以定义 65535 种不同的字符串从中做出选择,只能并且必须选择其中一种,占用存储空间是一个或两个字节,由枚举值的数目决定;集合 (SET) 类型,最多可以有 64 个成员,可以选择其中的零个到不限定的多个,占用存储空间是一个到八个字节,由集合可能的成员数目决定。



举个例子来说,在 SQLServer 中,你可以节约到用一个 BIT 类型来表示性别 (男/女),但 MySQL 没有 BIT,用 TINTINT 吗?不,可以用 ENUM(男孩’,’女孩’),只有两种选择,所以只需一个字节――跟 TINYINT 一样大,但却可以直接用字符串 ’男孩’ 和 ’女孩’ 来存取。


上一篇:MySQL 备份和恢复策略   下一篇:MySQL数据库中Show命令的用法


收藏于收藏夹】 【评论】 【推荐】 【打印】 【关闭
相关文档
·MySQL数据库中Show命令的用法
·MySQL 备份和恢复策略
·MySQL 备份和恢复策略(二)
·如何正确的更改表中的列顺序
·如何正确的解决 MySQL中忽略用户的现象
·MySQL 备份和恢复策略(三)
·MySQL 搜索中的大小写敏感性
·MySQL查询结果的分页显示
·轻松了解十个重要的 MySQL客户启动选项
·MySQL对“服务器端光标”的 限制
·如何处理未被适当关闭的表的问题
·怎样正确的解决 MySQL 中文模糊检索问题
·怎样修改 MySQL数据库中的密码
·带你轻松接触MaxDB和MySQL之间的协同性
·怎样在MySQL中获得更好的搜索结果
·怎样在Windows下升级MySQL
发表评论
密码: 匿名评论
评论内容:

(不超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
 
  最新文档
·深入讲解"InnoDB"和"MyISAM"的不同之处
·MySQL的存储过程写法和"Cursor"的使用
·如何安装配置基于2台服务器的MySQL集群
·带你轻松接触一个检测MySQL状态的脚本
·实例讲解"MySQL"在记录不存在时的插入
·无需编程直接利用图形界面导入导出的方
·教你快速掌握 MySQL数据库中触发器的应
·解析:怎样在MySQL中获得更好的搜索结果
·将数据从MySQL迁移到 Oracle的注意事项
·细化解析:怎样修改 MySQL数据库中的密
·解析:优化MySQL数据库性能的几个好方法
·教你轻松掌握如何保护MySQL中的重要数
  阅读排行
·Linux 安装 Mysql
·如何在Linux系统中安装MySQL
·在Linux 环境下安装 Mysql
·在Linux上安装MySQL Server 5.0
·图形化管理MySQL更轻松
·[Mysql]IIS+mysql+php相关知识介绍
·MySQL创始人David Axmark 访谈实录
·你应该知道的10个MySQL客户启动选项
·Heartbeat_2.0.3配置MySQL5.0.8集群
·Linux系统上安装MYSQL数据库的方法
·[MySQL]入门学习从安装入门到学习操作
·MySQL中文参考手册-创造并使用数据库
·MySQL5.0新特性教程 存储过程:第三讲
·MySQL 5.0新特性教程 存储过程:第一讲
·[Mysql]Mysql数据库管理系统优化方案
网摘收藏: