、数字类型
数字类型按照我
分类思路方法分为 3类:整数类、小数类和数字类
我所谓
![](/icons/12599de.gif)
“数字类”
![](/icons/12599dou.gif)
就是指DECIMAL和NUMERIC
![](/icons/12599dou.gif)
它们是同
![](/icons/12599yi.gif)
种类型
![](/icons/12599dou2.gif)
它严格
![](/icons/12599de.gif)
说不是
![](/icons/12599yi.gif)
种数字类型
![](/icons/12599dou.gif)
![](/icons/12599yinwei.gif)
他们实际上是将数字以
![](/icons/12599zifu.gif)
串形式保存
![](/icons/12599de.gif)
;他
![](/icons/12599de.gif)
值
![](/icons/12599de.gif)
每
![](/icons/12599yi.gif)
位(包括小数点)占
![](/icons/12599yi.gif)
个字节
![](/icons/12599de.gif)
存储空间
![](/icons/12599dou.gif)
因此这种类型耗费空间比较大
![](/icons/12599dou2.gif)
但是它
![](/icons/12599de.gif)
![](/icons/12599yi.gif)
个突出
![](/icons/12599de.gif)
优点是小数
![](/icons/12599de.gif)
位数固定
![](/icons/12599dou.gif)
在运算中不会“失真”
![](/icons/12599dou.gif)
所以比较适合用于“价格”、“金额”这样对精度要求不高但准确度要求非常高
![](/icons/12599de.gif)
字段.
小数类
![](/icons/12599dou.gif)
即浮点数类型
![](/icons/12599dou.gif)
根据精度
![](/icons/12599de.gif)
区别
![](/icons/12599dou.gif)
有FLOAT(单精度)和DOUBLE(双精度)两种
![](/icons/12599dou2.gif)
它们
![](/icons/12599de.gif)
优势是精确度
![](/icons/12599dou.gif)
FLOAT可以表示绝对值非常小、小到约 1.17E-38 (0.000…0117
![](/icons/12599dou.gif)
小数点后面有37个零)
![](/icons/12599de.gif)
小数
![](/icons/12599dou.gif)
而DOUBLE更是可以表示绝对值小到约 2.22E-308 (0.000…0222
![](/icons/12599dou.gif)
小数点后面有307个零)
![](/icons/12599de.gif)
小数
![](/icons/12599dou2.gif)
FLOAT类型和DOUBLE类型占用存储空间分别是4字节和8字节
![](/icons/12599dou2.gif)
如果需要用到小数
![](/icons/12599de.gif)
字段
![](/icons/12599dou.gif)
精度要求不高
![](/icons/12599de.gif)
![](/icons/12599dou.gif)
当然用FLOAT了!可是说句实在话
![](/icons/12599dou.gif)
我们“民用”
![](/icons/12599de.gif)
数据
![](/icons/12599dou.gif)
哪有要求精度那么高
![](/icons/12599de.gif)
呢?这两种类型至今我没有用过——我还没有遇到适合于使用它们
![](/icons/12599de.gif)
事例
用
![](/icons/12599de.gif)
最多
![](/icons/12599de.gif)
![](/icons/12599dou.gif)
最值得精打细算
![](/icons/12599de.gif)
![](/icons/12599dou.gif)
是整数类型
![](/icons/12599dou2.gif)
从只占
![](/icons/12599yi.gif)
个字节存储空间
![](/icons/12599de.gif)
TINYINT到占8个字节
![](/icons/12599de.gif)
BIGINT
![](/icons/12599dou.gif)
挑选
![](/icons/12599yi.gif)
个“够用”并且占用存储空间最小
![](/icons/12599de.gif)
类型是设计数据库时应该考虑
![](/icons/12599de.gif)
![](/icons/12599dou2.gif)
TINYINT、SMALLINT、MEDIUMINT、INT和BIGINT占用存储空间分别为1字节、2字节、3字节、4字节和8字节
![](/icons/12599dou.gif)
就无符号
![](/icons/12599de.gif)
整数而言
![](/icons/12599dou.gif)
这些类型能表示
![](/icons/12599de.gif)
最大整数分别为255、65535、16777215、4294967295和18446744073709551615
![](/icons/12599dou2.gif)
如果用来保存用户
![](/icons/12599de.gif)
年龄(举例来说
![](/icons/12599dou.gif)
数据库中保存年龄是不可取
![](/icons/12599de.gif)
)
![](/icons/12599dou.gif)
用TINYINT就够了; 9城
![](/icons/12599de.gif)
![](/icons/12599smhl.gif)
纵横
![](/icons/12599smhr.gif)
里
![](/icons/12599dou.gif)
各项技能值
![](/icons/12599dou.gif)
用SMALLINT也够了;如果要用作
![](/icons/12599yi.gif)
个肯定不会超过16000000行
![](/icons/12599de.gif)
表
![](/icons/12599de.gif)
AUTO_INCREMENT
![](/icons/12599de.gif)
IDENTIFY字段
![](/icons/12599dou.gif)
当然用 MEDIUMINT 不用 INT
![](/icons/12599dou.gif)
试想
![](/icons/12599dou.gif)
每行节约
![](/icons/12599yi.gif)
个字节
![](/icons/12599dou.gif)
16000000行可以节约10兆多呢!
2、日期时间类型
日期和时间类型比较简单
![](/icons/12599dou.gif)
无非是 DATE、TIME、DATETIME、TIMESTAMP和YEAR等几个类型
![](/icons/12599dou2.gif)
只对日期敏感
![](/icons/12599dou.gif)
而对时间没有要求
![](/icons/12599de.gif)
字段
![](/icons/12599dou.gif)
就用DATE而不用DATETIME是不用说
![](/icons/12599de.gif)
了;单独使用时间
![](/icons/12599de.gif)
情况也时有发生——使用TIME;但最多用到
![](/icons/12599de.gif)
还是用DATETIME
![](/icons/12599dou2.gif)
在日期时间类型上没有什么文章可做
![](/icons/12599dou.gif)
这里就不再详述
3、
(串)类型
不要以为
![](/icons/12599zifu.gif)
类型就是 CHAR !CHAR和VARCHAR
![](/icons/12599de.gif)
区别在于CHAR是固定长度
![](/icons/12599dou.gif)
只要你定义
![](/icons/12599yi.gif)
个字段是CHAR(10),那么不论你存储
![](/icons/12599de.gif)
数据是否达到了10个字节
![](/icons/12599dou.gif)
它都要占去10个字节
![](/icons/12599de.gif)
空间;而VARVHAR则是可变长度
![](/icons/12599de.gif)
![](/icons/12599dou.gif)
如果
![](/icons/12599yi.gif)
个字段可能
![](/icons/12599de.gif)
值是不固定长度
![](/icons/12599de.gif)
![](/icons/12599dou.gif)
我们只知道它不可能超过10个
![](/icons/12599zifu.gif)
![](/icons/12599dou.gif)
把它定义为 VARCHAR(10)是最合算
![](/icons/12599de.gif)
![](/icons/12599dou.gif)
VARCHAR 类型
![](/icons/12599de.gif)
实际长度是它
![](/icons/12599de.gif)
值
![](/icons/12599de.gif)
(实际长度+1)
![](/icons/12599dou2.gif)
为什么“+1”呢?这
![](/icons/12599yi.gif)
个字节用于保存实际使用了多大
![](/icons/12599de.gif)
长度呀!从这个“+1”中也应该看到
![](/icons/12599dou.gif)
如果
![](/icons/12599yi.gif)
个字段
![](/icons/12599dou.gif)
它
![](/icons/12599de.gif)
可能值最长是10个
![](/icons/12599zifu.gif)
![](/icons/12599dou.gif)
而多数情况下也就是用到了10个
![](/icons/12599zifu.gif)
时
![](/icons/12599dou.gif)
用VARCHAR就不合算了:
![](/icons/12599yinwei.gif)
在多数情况下
![](/icons/12599dou.gif)
实际占用空间是11个字节
![](/icons/12599dou.gif)
比用CHAR(10)还多占用
![](/icons/12599yi.gif)
个字节!
举个例子
![](/icons/12599dou.gif)
就是
![](/icons/12599yi.gif)
个存储股票名称和代码
![](/icons/12599de.gif)
表
![](/icons/12599dou.gif)
股票名称绝大部分是 4个字
![](/icons/12599de.gif)
![](/icons/12599dou.gif)
即8个字节;股票代码
![](/icons/12599dou.gif)
上海
![](/icons/12599de.gif)
是 6位数字
![](/icons/12599dou.gif)
深圳
![](/icons/12599de.gif)
是 4位数字
![](/icons/12599dou2.gif)
这些都是固定长度
![](/icons/12599de.gif)
![](/icons/12599dou.gif)
股票名称当然要用 CHAR(8) ;股票代码虽然是不固定长度
![](/icons/12599dou.gif)
但如果使用VARVHAR(6)
![](/icons/12599dou.gif)
![](/icons/12599yi.gif)
个深圳
![](/icons/12599de.gif)
股票代码实际占用空间是5个字节
![](/icons/12599dou.gif)
而
![](/icons/12599yi.gif)
个上海
![](/icons/12599de.gif)
股票代码要占用7个字节!考虑到上海
![](/icons/12599de.gif)
股票数目比深圳
![](/icons/12599de.gif)
多
![](/icons/12599dou.gif)
那么用VARCHAR(6)就不如CHAR(6)合算了
虽然
![](/icons/12599yi.gif)
个CHAR或VARVHAR
![](/icons/12599de.gif)
最大长度可以到255
![](/icons/12599dou.gif)
我认为大于20
![](/icons/12599de.gif)
CHAR是几乎用不到
![](/icons/12599de.gif)
——很少有大于20个字节长度
![](/icons/12599de.gif)
固定长度
![](/icons/12599de.gif)
东东吧?不是固定长度
![](/icons/12599de.gif)
就用VARCHAR!大于100
![](/icons/12599de.gif)
VARCHAR也是几乎用不到
![](/icons/12599de.gif)
——比这更大
![](/icons/12599de.gif)
用TEXT就好了
![](/icons/12599dou2.gif)
TINYTEXT
![](/icons/12599dou.gif)
最大长度为255
![](/icons/12599dou.gif)
占用空间也是(实际长度+1);TEXT
![](/icons/12599dou.gif)
最大长度65535
![](/icons/12599dou.gif)
占用空间是(实际长度+2);MEDIUMTEXT
![](/icons/12599dou.gif)
最大长度16777215
![](/icons/12599dou.gif)
占用空间是(实际长度+3);LONGTEXT
![](/icons/12599dou.gif)
最大长度4294967295
![](/icons/12599dou.gif)
占用空间是(实际长度+4)
![](/icons/12599dou2.gif)
为什么“+1”?“+2”?“+3”?“+4”?你要是还不知道就该打PP了
![](/icons/12599dou2.gif)
这些可以用在论坛啊、新闻啊
![](/icons/12599dou.gif)
什么
![](/icons/12599de.gif)
![](/icons/12599dou.gif)
用来保存文章
![](/icons/12599de.gif)
正文
![](/icons/12599dou2.gif)
根据实际情况
![](/icons/12599de.gif)
区别
![](/icons/12599dou.gif)
选择从小到大
![](/icons/12599de.gif)
区别类型
4、枚举和集合类型
枚举(ENUM)类型
![](/icons/12599dou.gif)
最多可以定义65535种区别
![](/icons/12599de.gif)
![](/icons/12599zifu.gif)
串从中做出选择
![](/icons/12599dou.gif)
只能并且必须选择其中
![](/icons/12599yi.gif)
种
![](/icons/12599dou.gif)
占用存储空间是
![](/icons/12599yi.gif)
个或两个字节
![](/icons/12599dou.gif)
由枚举值
![](/icons/12599de.gif)
数目决定;集合(SET)类型
![](/icons/12599dou.gif)
最多可以有64个成员
![](/icons/12599dou.gif)
可以选择其中
![](/icons/12599de.gif)
零个到不限定
![](/icons/12599de.gif)
多个
![](/icons/12599dou.gif)
占用存储空间是
![](/icons/12599yi.gif)
个到 8个字节
![](/icons/12599dou.gif)
由集合可能
![](/icons/12599de.gif)
成员数目决定
举个例子来说
![](/icons/12599dou.gif)
在SQLServer中
![](/icons/12599dou.gif)
你可以节约到用
![](/icons/12599yi.gif)
个Bit类型来表示性别(男/女)
![](/icons/12599dou.gif)
但MySQL没有Bit
![](/icons/12599dou.gif)
用TINTINT?不
![](/icons/12599dou.gif)
可以用ENUM(帅哥,美眉)!只有两种选择
![](/icons/12599dou.gif)
所以只需
![](/icons/12599yi.gif)
个字节——跟TINYINT
![](/icons/12599yi.gif)
样大
![](/icons/12599dou.gif)
但却可以直接用
![](/icons/12599zifu.gif)
串帅哥和美眉来存取
![](/icons/12599dou2.gif)
真是太方便啦!