[TOC]
MySQL中定义数据字段的类型对你数据库的优化是非常重要的。
MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。
## 数值类型
MySQL支持所有标准SQL数值数据类型。
<table class="reference">
<tbody>
<tr>
<th width="10%">
<strong>
类型
</strong>
</th>
<th width="15%">
<strong>
大小
</strong>
</th>
<th width="30%">
<strong>
范围(有符号)
</strong>
</th>
<th width="30%">
<strong>
范围(无符号)
</strong>
</th>
<th width="15%">
<strong>
用途
</strong>
</th>
</tr>
<tr>
<td>
TINYINT
</td>
<td>
1 字节
</td>
<td>
(-128,127)
</td>
<td>
(0,255)
</td>
<td>
小整数值
</td>
</tr>
<tr>
<td>
SMALLINT
</td>
<td>
2 字节
</td>
<td>
(-32 768,32 767)
</td>
<td>
(0,65 535)
</td>
<td>
大整数值
</td>
</tr>
<tr>
<td>
MEDIUMINT
</td>
<td>
3 字节
</td>
<td>
(-8 388 608,8 388 607)
</td>
<td>
(0,16 777 215)
</td>
<td>
大整数值
</td>
</tr>
<tr>
<td>
INT或INTEGER
</td>
<td>
4 字节
</td>
<td>
(-2 147 483 648,2 147 483 647)
</td>
<td>
(0,4 294 967 295)
</td>
<td>
大整数值
</td>
</tr>
<tr>
<td>
BIGINT
</td>
<td>
8 字节
</td>
<td>
(-9 233 372 036 854 775 808,9 223 372 036 854 775 807)
</td>
<td>
(0,18 446 744 073 709 551 615)
</td>
<td>
极大整数值
</td>
</tr>
<tr>
<td>
FLOAT
</td>
<td>
4 字节
</td>
<td>
(-3.402 823 466 E+38,1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823
466 351 E+38)
</td>
<td>
0,(1.175 494 351 E-38,3.402 823 466 E+38)
</td>
<td>
单精度
<br>
浮点数值
</td>
</tr>
<tr>
<td>
DOUBLE
</td>
<td>
8 字节
</td>
<td>
(1.797 693 134 862 315 7 E+308,2.225 073 858 507 201 4 E-308),0,(2.225
073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)
</td>
<td>
0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)
</td>
<td>
双精度
<br>
浮点数值
</td>
</tr>
<tr>
<td>
DECIMAL
</td>
<td>
对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2
</td>
<td>
依赖于M和D的值
</td>
<td>
依赖于M和D的值
</td>
<td>
小数值
</td>
</tr>
</tbody>
</table>
## 日期和时间类型
表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。
每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。
<table class="reference">
<tbody>
<tr>
<th width="10%">
类型
</th>
<th width="10%">
大小
<br>
(字节)
</th>
<th width="40%">
范围
</th>
<th>
格式
</th>
<th>
用途
</th>
</tr>
<tr>
<td width="10%">
DATE
</td>
<td width="10%">
3
</td>
<td width="40%">
1000-01-01/9999-12-31
</td>
<td>
YYYY-MM-DD
</td>
<td>
日期值
</td>
</tr>
<tr>
<td width="10%">
TIME
</td>
<td width="10%">
3
</td>
<td width="40%">
'-838:59:59'/'838:59:59'
</td>
<td>
HH:MM:SS
</td>
<td>
时间值或持续时间
</td>
</tr>
<tr>
<td width="10%">
YEAR
</td>
<td width="10%">
1
</td>
<td width="40%">
1901/2155
</td>
<td>
YYYY
</td>
<td>
年份值
</td>
</tr>
<tr>
<td width="10%">
DATETIME
</td>
<td width="10%">
8
</td>
<td width="40%">
1000-01-01 00:00:00/9999-12-31 23:59:59
</td>
<td>
YYYY-MM-DD HH:MM:SS
</td>
<td>
混合日期和时间值
</td>
</tr>
<tr>
<td width="10%">
TIMESTAMP
</td>
<td width="10%">
4
</td>
<td width="40%">
1970-01-01 00:00:00/2037 年某时
</td>
<td>
YYYYMMDD HHMMSS
</td>
<td>
混合日期和时间值,时间戳
</td>
</tr>
</tbody>
</table>
## 字符串类型
字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET
<table class="reference">
<tbody>
<tr>
<th width="20%">
类型
</th>
<th width="25%">
大小
</th>
<th width="55%">
用途
</th>
</tr>
<tr>
<td>
CHAR
</td>
<td>
0-255字节
</td>
<td>
定长字符串
</td>
</tr>
<tr>
<td>
VARCHAR
</td>
<td>
0-65535 字节
</td>
<td>
变长字符串
</td>
</tr>
<tr>
<td>
TINYBLOB
</td>
<td>
0-255字节
</td>
<td>
不超过 255 个字符的二进制字符串
</td>
</tr>
<tr>
<td>
TINYTEXT
</td>
<td>
0-255字节
</td>
<td>
短文本字符串
</td>
</tr>
<tr>
<td>
BLOB
</td>
<td>
0-65 535字节
</td>
<td>
二进制形式的长文本数据
</td>
</tr>
<tr>
<td>
TEXT
</td>
<td>
0-65 535字节
</td>
<td>
长文本数据
</td>
</tr>
<tr>
<td>
MEDIUMBLOB
</td>
<td>
0-16 777 215字节
</td>
<td>
二进制形式的中等长度文本数据
</td>
</tr>
<tr>
<td>
MEDIUMTEXT
</td>
<td>
0-16 777 215字节
</td>
<td>
中等长度文本数据
</td>
</tr>
<tr>
<td>
LONGBLOB
</td>
<td>
0-4 294 967 295字节
</td>
<td>
二进制形式的极大文本数据
</td>
</tr>
<tr>
<td>
LONGTEXT
</td>
<td>
0-4 294 967 295字节
</td>
<td>
极大文本数据
</td>
</tr>
</tbody>
</table>
## CHAR和VARCHAR
### CHAR
用于定长字符串,并且必须在圆括号内用一个大小修饰符来定义。这个大小修饰符的范围仍0-255。比指定长度大的值将被截短,而比指定长度小的值将会用空格作填补
### VARCHAR
它是一种可变长度的字符串类型,并且也必须带有一个范围在0-65535之间的指示器。CHAR 和 VARCHGAR 不同之处在于 MySQL 数据库处理这个指示器的方式:CHAR 把这个大小视为值的大小,在长度不足的情况下就用空格补足。而 VARCHAR 类型把它视为最大值并且只使用存储字符串实际需要的长度来存储值。所以短于指示器长 度的 VARCHAR 类型不会被空格填补,但长于指示器的值仍然会被截短。
## ENUM
ENUM 类型因为只允许在集合中取得一个值,有点类似于单选项。在处理相互排拆的数据时容易让人理解,比如人类的性别。最大可以有 65535 个成员值
~~~
enum('男','女','保密')
~~~
## SET
SET 类型和 ENUM 类型相似但不相同。SET类型可以从预定义的集合中取得任意数量的值。一个 SET 类型最多可以包含 64 项元素。
~~~
set('游戏','看书','打篮球')
~~~
常用的数据类型
<table>
<tbody>
<tr>
<th>字段</th>
<th>类型</th>
</tr>
<tr>
<td>姓名</td>
<td>char(20)</td>
</tr>
<tr>
<td>价格</td>
<td>DECIMAL(7, 3)</td>
</tr>
<tr>
<td>文章类型</td>
<td>TEXT</td>
</tr>
<tr>
<td>手机</td>
<td>char(11)</td>
</tr>
<tr>
<td>时间戳</td>
<td>int(10)</td>
</tr>
</tbody>
</table>
- 序言
- 第一章:准备工作
- 写在学习之前的话
- web应用开发结构
- 开发工具/环境
- 第二章:展现层面(HTML/CSS)
- HTML简介
- HTML基础
- HTML编码
- HTML链接
- HTML图像
- HTML列表
- HTML表单
- HTML表格(分水岭)
- HTML 实体
- HTML框架
- CSS层叠样式表
- CSS选择器
- CSS文本/字体
- CSS继承和叠加
- CSS框模型
- CSS浮动(分水岭)
- CSS定位
- CSS背景
- CSS图标字体
- CSS补充
- 开发技巧
- 第三章:展现层面(Javascript)
- JS简介
- JS实现
- JS输出交互
- JS变量
- JS数据类型
- JS运算符
- JS流程控制(分水岭)
- JS函数
- JS数组
- JS对象(分水岭)
- JS数组对象
- JS字符串对象
- JS数学对象
- JS日期对象
- JS BOM对象(分水岭)
- JS DOM对象
- JS事件对象
- JS元素对象
- JS DOM节点
- 第四章:展现层面(Jquery)
- JQ简介
- JQ使用
- JQ选择器
- JQ筛选
- JQ属性
- JQ-CSS
- JQ事件
- JQ文档处理
- JQ效果
- JQ-ajax
- 第五章:逻辑/业务层面(PHP)
- PHP简介
- PHP变量
- PHP数据类型
- PHP常量
- PHP运算符
- PHP流程控制
- PHP函数(分水岭)
- PHP日期
- PHP数学
- PHP数组
- PHP字符串
- PHP正则表达式(分水岭)
- PHP目录操作
- PHP文件
- PHP上传/下载
- PHP面向对象(分水岭)
- PHP图像处理
- PHP会话控制
- Ajax异步处理
- PHPMysql扩展
- PHPMysqli扩展
- PHPPdo扩展
- PHP接口
- PHP命名空间
- 第六章:逻辑/业务层面(框架设计)
- 第七章:存储层面(mysql)
- Mysql基础
- Mysql Sql简介
- Mysql数据库
- Mysql数据类型
- Mysql数据表
- Mysql操作记录
- Mysql查询
- Mysql修改表结构
- Mysql日期与时间
- Mysql分组统计
- Mysql多表查询
- Mysql安全
- Mysql存储引擎
- Mysql事务
- Mysql视图
- Mysql触发器
- Mysql存储过程
- Mysql存储函数
- Mysql优化
- 第八章:服务器(Linux)
- Linux介绍与安装
- Shell
- 目录与文件操作
- VIM编辑器使用
- 帐号管理
- SUDO
- 权限控制
- 压缩与打包
- 软件安装
- 计划任务
- 进程管理
- 宝塔Linux面板