MySQL数据库(三):数据类型

@lianst  July 22, 2016

安装环境:
操作系统版本:RHEL 6.5
版本:MYSQL 5.5


常见的信息种类:
数值型:一般用于体重、身高、成绩、工资
字符型:一般用于姓名、工作单位、通信地址
枚举型:一般用于兴趣爱好、性别
日期时间型:出生日期、注册日期

一、数值类型
1.1整数型
PS:工作中一般使用INT类型就够了
关于整数型字段
-使用UNSIGNED修饰时,对应的字段只保存正数
-数值不够指定宽度时,在左边填空格补位
-宽度仅仅是显示宽度,存数值的大小由类型决定
-使用关键字ZEROFILL时,填0代替空格补位
-当字段值与类型不匹配时,字段值作为0处理
-数值超出范围时,仅保存最大/最小值

表字段的设置


从左至右依次为: 字段名 | 字段类型 | 是否为空 | 是否为主键 | 默认值 | 描述信息

1.2 浮点类型
关于浮点型字段
-定义格式:float(总宽度,小数位数)
-当字段值与类型不匹配时,字段值作为0处理
-数值超出范围时,仅保存最大/最小值

mysql> create table t2(
    -> name varchar(20),
    -> pay float(7,2)
    -> );
Query OK, 0 rows affected (0.00 sec)

mysql> desc t2;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| name  | varchar(20) | YES  |     | NULL    |       |
| pay   | float(7,2)  | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.01 sec)

二、、字符类型
1、定长:char(字符数)
-最大长度255字符
-不够指定字符数时在右边用空格补齐
-自动截断超出指定字符数的数据

2、变长:varchar(字符数)
-按数据实际大小分配存储空间
-自动截断超出指定字符数的数据

3、大文本类型:text/blob
-字符数大于65535存储时使用

mysql> create table t3(
    -> name char(10),
    -> addr varchar(50),
    -> content text
    -> );
Query OK, 0 rows affected (0.00 sec)

mysql> desc t3;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| name    | char(10)    | YES  |     | NULL    |       |
| addr    | varchar(50) | YES  |     | NULL    |       |
| content | text        | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

三、日期时间类型
1、 DATATIME
-占用8个字节
-范围:1000-01-01 00:00:00.000000~9999-12-31 23:59:59.999999

2、 TIMESTAMP
-占用4个字节
-范围:1970-01-01 00:00:00.000000~2038-01-19 03:14:07.999999

3、 DATE
-占用4个字节
-范围:0001-01-01~9999-12-31

4、YEAR
-占用1个字节
-范围:1901-2155

5、TIME
-占用3个字节
-格式:HH:MM:SS

例子:

mysql> create table shijian(
    -> datetime DATETIME,
    -> timestamp TIMESTAMP,
    -> date DATE,
    -> year YEAR,
    -> time TIME
    -> );
Query OK, 0 rows affected (0.00 sec)

mysql> insert into shijian values("2016-07-31 10:24:00.000000","2035-1-19 03:14:17.999999","2036-1-1","2037","03:59:00");
Query OK, 1 row affected (0.00 sec)

mysql> select * from shijian;
+---------------------+---------------------+------------+------+----------+
| datetime            | timestamp           | date       | year | time     |
+---------------------+---------------------+------------+------+----------+
| 2016-07-31 10:24:00 | 2035-01-19 03:14:17 | 2036-01-01 | 2037 | 03:59:00 |
+---------------------+---------------------+------------+------+----------+
1 row in set (0.00 sec)

6、 关于日期时间字段
当未给TIMESTAMP字段赋值时,自动以当前时间赋值,而DATETIME字段默认赋值为0
4.7 YEAR年份的处理
-默认用4位数字表示
-当只用2位数字赋值时,00-69视为2000~2069年,而70-99视为1970~1999年。

7、 时间函数

-使用select指定输出函数结果

mysql> select now(),sysdate(),curdate();
+---------------------+---------------------+------------+
| now()               | sysdate()           | curdate()  |
+---------------------+---------------------+------------+
| 2016-07-31 10:37:25 | 2016-07-31 10:37:25 | 2016-07-31 |
+---------------------+---------------------+------------+
1 row in set (0.00 sec)

四、枚举类型
1、从给定值集中选择单个值-ENUM
-定义格式:

enum(值1,值2,值N)

2、 从给定值集合中选择一个或者多个值-SET
-定义格式:

set(值1,值2,值N)

例子:

mysql> create table meiju(
    -> name varchar(20),
    -> gender enum("boy","girl"),
    -> interest set("book","film","music","football")
    -> );
Query OK, 0 rows affected (0.01 sec)


添加新评论