#常见的数据类型
/*
数值型
    整型
    小数:
        定点数
        浮点数
字符型
    较短的文本:char、varchar
    较长的文本:text、blob(较长的二进制数据)
日期型
 
 
选择类型的原则:
所选择的类型越简单越好,能保存数值的类型越小越好
*/

#一、整型
/*
分类:
tinyint、smallint、mediumint、int/integer、bigint
字节:1        2        3             4         8

特点:

a.如果不设置无符号还是有符号,默认是有符号,如果想设置无符号,需要添加unsigned关键字
b.如果插入的数值超出了整型的范围,会报out of range异常,并且插入临界值
c.如果不设置长度,会有默认的长度
长度代表了显示的最大宽度,如果不够会用0在左边填充,但必须搭配zerofill使用!

*/

#二、小数
/*
浮点型:
    float(M,D) double(M,D)
    4    8
定点数:(8字节,精度更好)
    dec(M,D)  decimal(M,D)
    
特点:
    a. M和D
       M:整数部位+小数部位的个数
       D:小数部位
       如果超过范围,则插入临界值
    b.M和D都可以省略
       如果是decimal,则M默认为10,D默认为0
       如果是float和double,则根据插入数值精度决定M和D
    c.定点型相对精度较高

*/

#三、字符型
/*
较短的文本:char(M)  varchar(M)

较长的文本:text  blob(较大的二进制)

binary varbinary enum set

    M:最多字符数;
对比:
    写法        M的意思        特点
char    char(M)        最大字符数    固定长度的字符,耗费空间,效率高
            默认为1        (设置为多少就是多少)
varchar varchar(M)    最大字符数    可变长度的字符,节省空间,效率低
            不可省略     (根据实际插入字符长度而定,但不超过设置长度)
*/

#扩展:enum 枚举类型;set 集合类型 

USE test;
CREATE TABLE tab_char(
    ci ENUM('a','b','c')#每次插入只能是其中一个
);

INSERT INTO tab_char VALUE('a');
INSERT INTO tab_char VALUE('v');#不在枚举内不会出现

DROP TABLE tab_str;
CREATE TABLE tab_str(
    si SET('a','b','c')#每次插入可插入其中多个
);

INSERT INTO tab_str VALUE('a');
INSERT INTO tab_str VALUE('a,b');
INSERT INTO tab_str VALUE('a,b,c');
INSERT INTO tab_str VALUE('a,b,v');#不在枚举内不会出现


#四、日期型
/*
    字节    
date    4    日期
time    3    时间
year    1    

datetime 8    日期+时间
timestamp 4    日期+时间

区别:
        字节    范围        是否受时区影响
datetime    4    1000-9999    不受
timestamp    8    1970-2038    

*/

CREATE TABLE tab_time(
    t1 DATETIME,
    t2 TIMESTAMP
);

INSERT INTO tab_time VALUE(NOW(),NOW());

SELECT * FROM tab_time;

SHOW VARIABLES LIKE 'time_zone';

SET time_zone='+9:00';