专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »数据库 » mysql建库:MySQL 数据类型和建库策略 »正文

mysql建库:MySQL 数据类型和建库策略

来源: 发布时间:星期四, 2008年12月25日 浏览:51次 评论:0
、数字类型数字类型按照我分类思路方法分为 3类:整数类、小数类和数字类
我所谓“数字类”就是指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就够了; 9城纵横各项技能值用SMALLINT也够了;如果要用作个肯定不会超过16000000行AUTO_INCREMENTIDENTIFY字段当然用 MEDIUMINT 不用 INT 试想每行节约个字节16000000行可以节约10兆多呢!
2、日期时间类型
日期和时间类型比较简单无非是 DATE、TIME、DATETIME、TIMESTAMP和YEAR等几个类型只对日期敏感而对时间没有要求字段就用DATE而不用DATETIME是不用说了;单独使用时间情况也时有发生——使用TIME;但最多用到还是用DATETIME在日期时间类型上没有什么文章可做这里就不再详述
3、(串)类型
不要以为类型就是 CHAR !CHAR和VARCHAR区别在于CHAR是固定长度只要你定义个字段是CHAR(10),那么不论你存储数据是否达到了10个字节它都要占去10个字节空间;而VARVHAR则是可变长度如果个字段可能值是不固定长度我们只知道它不可能超过10个把它定义为 VARCHAR(10)是最合算VARCHAR 类型实际长度是它(实际长度+1)为什么“+1”呢?这个字节用于保存实际使用了多大长度呀!从这个“+1”中也应该看到如果个字段可能值最长是10个而多数情况下也就是用到了10个用VARCHAR就不合算了:在多数情况下实际占用空间是11个字节比用CHAR(10)还多占用个字节!
举个例子就是个存储股票名称和代码股票名称绝大部分是 4个字即8个字节;股票代码上海是 6位数字深圳是 4位数字这些都是固定长度股票名称当然要用 CHAR(8) ;股票代码虽然是不固定长度但如果使用VARVHAR(6)个深圳股票代码实际占用空间是5个字节个上海股票代码要占用7个字节!考虑到上海股票数目比深圳那么用VARCHAR(6)就不如CHAR(6)合算了
虽然个CHAR或VARVHAR最大长度可以到255我认为大于20CHAR是几乎用不到——很少有大于20个字节长度固定长度东东吧?不是固定长度就用VARCHAR!大于100VARCHAR也是几乎用不到——比这更大用TEXT就好了TINYTEXT最大长度为255占用空间也是(实际长度+1);TEXT最大长度65535占用空间是(实际长度+2);MEDIUMTEXT最大长度16777215占用空间是(实际长度+3);LONGTEXT最大长度4294967295占用空间是(实际长度+4)为什么“+1”?“+2”?“+3”?“+4”?你要是还不知道就该打PP了这些可以用在论坛啊、新闻啊什么用来保存文章正文根据实际情况区别选择从小到大区别类型
4、枚举和集合类型
枚举(ENUM)类型最多可以定义65535种区别串从中做出选择只能并且必须选择其中占用存储空间是个或两个字节由枚举值数目决定;集合(SET)类型最多可以有64个成员可以选择其中零个到不限定多个占用存储空间是个到 8个字节由集合可能成员数目决定
举个例子来说在SQLServer中你可以节约到用个Bit类型来表示性别(男/女)但MySQL没有Bit用TINTINT?不可以用ENUM(帅哥,美眉)!只有两种选择所以只需个字节——跟TINYINT样大但却可以直接用串帅哥和美眉来存取真是太方便啦!
0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: