Mysql---数据类型

一.整数类型

  1.包括TINYINT SMALLINT MEDIUMINT INT BIGINT,常用的主要为int 及tinyint

  2.tinyint

    tinyint【(m)】 【unsigned】 【zerofill】 默认有符号,m可以不写,默认为tinyint(4)

    小整数,保存数据范围如下:

    有符号:-128~127

    无符号:0~255

    PS: MySQL中无布尔值,使用tinyint(1)构造

 3.int
    int【(m)】 【unsigned】 【zerofill】  默认有符号,m可以不写,默认为int(11)
    整数,保存数据范围如下:
    有符号:-2147483648 ~ 2147483647
    无符号:0 ~ 4294967295
 4.整型的m为显示宽度,其他类型的为存储宽度,zerofill为补位符,当实际位数比m小时,可选用zerofill,即用0来补位。

二.浮点型    (M,D)------(总长,小数点后位数)

  1.浮点型

    a.float  单精度  随小数点位增加而不准确   (M,D)------(255,30)

    b.double  双精度  随小数点位增加而不准确   (M,D)------(255,30)

  2.定点型 decimal   准确的小数(M,D)------(65,30)   

# 分别对三张表插入相应的记录
mysql> insert into t5 values(1.1111111111111111111111111111111);#小数点后31个1
Query OK, 1 row affected (0.01 sec)

mysql> insert into t6 values(1.1111111111111111111111111111111);
Query OK, 1 row affected (0.01 sec)

mysql> insert into t7 values(1.1111111111111111111111111111111);
Query OK, 1 row affected, 1 warning (0.00 sec)

# 查询结果
mysql> select * from t5; #随着小数的增多,精度开始不准确
+----------------------------------+
| x                                |
+----------------------------------+
| 1.111111164093017600000000000000 |
+----------------------------------+
1 row in set (0.00 sec)

mysql> select * from t6; #精度比float要准确点,但随着小数的增多,同样变得不准确
+----------------------------------+
| x                                |
+----------------------------------+
| 1.111111111111111200000000000000 |
+----------------------------------+
1 row in set (0.00 sec)

mysql> select * from t7; #精度始终准确,d为30,于是只留了30位小数
+----------------------------------+
| x                                |
+----------------------------------+
| 1.111111111111111111111111111111 |
+----------------------------------+
1 row in set (0.00 sec)
三种类型精度验证

三.日期类型

  常用:datetime date time year

YEAR
            YYYY(1901/2155)

        DATE
            YYYY-MM-DD(1000-01-01/9999-12-31)

        TIME
            HH:MM:SS('-838:59:59'/'838:59:59')

        DATETIME

            YYYY-MM-DD HH:MM:SS(1000-01-01 00:00:00/9999-12-31 23:59:59    Y)

        TIMESTAMP

            YYYYMMDD HHMMSS(1970-01-01 00:00:00/2037 年某时)
日期类型语法

  1.year  无论year指定何种宽度,最后都默认是year(4)

  2.mysql自带的now()函数,获取当前类型指定的时间 

  3.datetime与timestamp的区别 

在实际应用的很多场景中,MySQL的这两种日期类型都能够满足我们的需要,存储精度都为秒,但在某些情况下,会展现出他们各自的优劣。
下面就来总结一下两种日期类型的区别。

1.DATETIME的日期范围是1001——9999年,TIMESTAMP的时间范围是1970——2038年。

2.DATETIME存储时间与时区无关,TIMESTAMP存储时间与时区有关,显示的值也依赖于时区。在mysql服务器,
操作系统以及客户端连接都有时区的设置。

3.DATETIME使用8字节的存储空间,TIMESTAMP的存储空间为4字节。因此,TIMESTAMP比DATETIME的空间利用率更高。

4.DATETIME的默认值为null;TIMESTAMP的字段默认不为空(not null),默认值为当前时间(CURRENT_TIMESTAMP),
如果不做特殊处理,并且update语句中没有指定该列的更新值,则默认更新为当前时间。
View Code

  4.注意事项

    a. 单独插入时间时,需要以字符串的形式,按照对应的格式插入

   b.插入年份时,尽量使用4位值

    c.插入两位年份时,<=69,以20开头,比如50,  结果2050      
                       >=70,以19开头,比如71,结果197

四.字符类型

  1.char 定长,存储速度快,浪费空间

  让char类型显示字符长度:

    设置当前:SET sql_mode=PAD_CHAR_TO_FULL_LENGTH;

    设置当局:SET global sql_mode=PAD_CHAR_TO_FULL_LENGTH

  2.varchar 变长,存储速度慢,节省空间

  3.效率:char>varchar>text

  4.两个方法

    a.length()  查看字节数

    b.char_length()  查看字符数

五.枚举和集合

  1.枚举  enum  单选  只能在给定的范围内选一个---多选一

  2.集合 set  多选  可以在给定的范围内选一个或选多个---多选一或多选多

mysql> create table consumer(
    -> id int,
    -> name varchar(50),
    -> sex enum('male','female','other'),
    -> level enum('vip1','vip2','vip3','vip4'),#在指定范围内,多选一
    -> fav set('play','music','read','study') #在指定范围内,多选多
    -> );
Query OK, 0 rows affected (0.03 sec)


mysql> insert into consumer values
    -> (1,'赵云','male','vip2','read,study'),
    -> (2,'赵云2','other','vip4','play');
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from consumer;
+------+---------+-------+-------+------------+
| id   | name    | sex   | level | fav        |
+------+---------+-------+-------+------------+
|    1 | 赵云    | male  | vip2  | read,study |
|    2 | 赵云2   | other | vip4  | play       |
+------+---------+-------+-------+------------+
2 rows in set (0.00 sec)
View Code

  

原文地址:https://www.cnblogs.com/wdbgqq/p/9555050.html