数值型之整数

image.png

  1. -- 测试整型,范围是-128~127
  2. CREATE TABLE test_int(
  3. a tinyint,
  4. b smallint,
  5. c mediumint,
  6. d int,
  7. e bigint
  8. );
  9. -- 正常插入
  10. INSERT test_int(a) VALUES(-128);
  11. -- 插入报错
  12. INSERT test_int(a) VALUES(-129); -- 报错
  13. INSERT test_int(a) VALUES(128); -- 报错

数值型之浮点数

image.png

  1. 如果超出小数点后的位数,会进行四舍五入
  2. FLOAT和DOUBLE四舍五入之后不会报警告,DECIMAL四舍五入之后会报警告
  3. 如果不指定小数点后的位数,DECIMAL默认四舍五入之后显示整数
-- 测试浮点
CREATE TABLE test_float(
  a FLOAT(6,2),
  b DOUBLE(6,2),
  C DECIMAL(6,2)
);

-- 进行了四舍五入处理
-- a和b不会报警告,c会报警告
INSERT test_float(a,b,c) VALUES(4.143,4.146,4.149);    -- 结果为:| 4.14 | 4.15 | 4.15 |

注意:如果不指定DECIMAL的小数点后位数,默认四舍五入之后显示整数

CREATE TABLE test_float1(
  a FLOAT,
  b DOUBLE,
  C DECIMAL
);

-- 结果为4.143,4.146,4
INSERT test_float1(a,b,c) VALUES(4.143,4.146,4.149);

-- 结果为4.143,4.146,5
INSERT test_float1(a,b,c) VALUES(4.143,4.146,4.649);

字符串类型

image.png

CHAR

  1. 定长字符串,空间固定,查询速度较快
  2. 存储数据的时候,后面会用空格填充到指定长度
  3. 在检索的时候会去掉后面的空格

VARCHAR

  1. 变长字符串,空间根据实际字符串的长度可变,查询速度较慢
  2. 存储数据的时候,后面不会用空格填充
  3. 在检索的时候不会去掉后面的空格(如果字符串本身就有的话)
-- 测试char 和 varchar
CREATE TABLE test_str(
  a CHAR(5),
  b VARCHAR(5)
);

INSERT test_str(a,b) VALUES('','');                        -- 结果为:|       |       |
INSERT test_str(a,b) VALUES('a','a');                    -- 结果为:| a     | a     |
INSERT test_str(a,b) VALUES('ab','ab');                -- 结果为:| ab    | ab    |
INSERT test_str(a,b) VALUES('abc','abc');            -- 结果为:| abc   | abc   |
INSERT test_str(a,b) VALUES('abcd','abcd');        -- 结果为:| abcd  | abcd  |
INSERT test_str(a,b) VALUES('abcde','abcde');    -- 结果为:| abcde | abcde |    

INSERT test_str(a,b) VALUES(' 123 ',' 123 ');
SELECT CONCAT('*',a,'*'),CONCAT('*',b,'*') FROM test_str;    -- 结果为:| * 123*  | * 123 *  |

TEXT

  1. 不能有默认值
  2. 检索的时候不存在大小写转换
    --    以下会报错
    CREATE TABLE test_str1(
    content TEXT DEFAULT 'THIS IS A TEST'
    );
    

ENUM

  1. 只能插入枚举列表中的一个值
  2. 可以插入NULL
  3. 可以根据编号插入,ENUM的编号以1开始
  4. 会自动过滤掉空格
-- 测试ENUM(枚举)
CREATE TABLE test_enum(
  sex ENUM('男','女','保密')
);

INSERT test_enum(sex) VALUES('男');        -- | 男   |
INSERT test_enum(sex) VALUES('男1');        -- 会报错
INSERT test_enum(sex) VALUES(NULL);         -- | NULL |

INSERT test_enum(sex) VALUES(1);             -- | 男   |
INSERT test_enum(sex) VALUES(3);             -- | 保密   |
INSERT test_enum(sex) VALUES(5);             --会报错

SET

  1. 可以插入集合列表中的多个值
  2. 可以插入NULL
  3. 可以根据编号插入,SET的编号以1开始
  4. 会自动过滤掉空格
  5. 常用于权限分配
--测试SET(集合)
CREATE TABLE test_set(
  a SET('A','B','C','D','E','F')
);
INSERT test_set(a) VALUES('A');                -- | A     |
INSERT test_set(a) VALUES('B');                -- | B     |
INSERT test_set(a) VALUES('C');                -- | C     |
INSERT test_set(a) VALUES('D,E');            -- | D,E   |
INSERT test_set(a) VALUES('F,D,B');        -- | B,D,F |
INSERT test_set(a) VALUES('C,F,A,H');    --会报错
INSERT test_set(a) VALUES(2);                    -- | B     |
INSERT test_set(a) VALUES(NULL);            -- | NULL  |

日期时间类型

image.png

TIME

--HH:MM:SS [D HH:MM:SS] D表示天数 0~34 例:2 3:23:45 → 51:23:45

--测试TIME类型
-- -838:59:59 ~ 838:59:59

CREATE TABLE test_time(
  a TIME
);

INSERT test_time(a) VALUES('12:23:45');        -- | 12:23:45 |
INSERT test_time(a) VALUES('2 12:23:45');    -- | 60:23:45 |
INSERT test_time(a) VALUES('22:22');            -- | 22:22:00 |
INSERT test_time(a) VALUES('22');                    -- | 00:00:22 |
INSERT test_time(a) VALUES('2 22');                -- | 70:00:00 |

--HHMMSS
INSERT test_time(a) VALUES('121212');            -- | 12:12:12 |
INSERT test_time(a) VALUES('0');                    -- | 00:00:00 |
INSERT test_time(a) VALUES(0);                        -- | 00:00:00 |
INSERT test_time(a) VALUES('787878');            -- 会报错

--使用系统函数
INSERT test_time(a) VALUES(NOW());                -- | 16:09:20 |
INSERT test_time(a) VALUES(CURRENT_TIME);    -- | 16:09:21 |

DATE

--测试DATE类型 YYYY-MM-DD YYYYMMDD
--1000.01.01 ~ 9999.12.31
CREATE TABLE test_date(
  a DATE
);
INSERT test_date(a) VALUES('2017-03-04');
INSERT test_date(a) VALUES('2017-2-13');
INSERT test_date(a) VALUES('4007-03-23');
INSERT test_date(a) VALUES('40071212');
INSERT test_date(a) VALUES('4007@12@12');--mysql支持不严格的分隔符
INSERT test_date(a) VALUES('4008#12#12');--mysql支持不严格的分隔符
INSERT test_date(a) VALUES('4009.12.12');--mysql支持不严格的分隔符

--YY-MM-DD YYMMDD
--70~99:转换成1970~1999
--00~69:转换成2000~2069
INSERT test_date(a) VALUES('780902');    --1978.09.02
INSERT test_date(a) VALUES('650902');    --2065.09.02

--使用系统函数
INSERT test_date(a) VALUES(NOW());
INSERT test_date(a) VALUES(CURRENT_DATE);

DATETIME

CREATE TABLE test_datetime(
  a DATETIME
);

INSERT test_datetime(a) VALUES('1004-09-12 13:24:56');    -- | 1004-09-12 13:24:56 |
INSERT test_datetime(a) VALUES('720305121212');                    -- | 1972-03-05 12:12:12 |
INSERT test_datetime(a) VALUES(NOW());                                    -- | 2019-09-06 16:15:21 |

TIMESTAMP

--测试TIMESTAMP
--1970.01.01 00:00:00 UTC ~ 2038.01.19 03:14:07
CREATE TABLE test_timestamp(
  a TIMESTAMP
);
INSERT test_timestamp(a) VALUES('1978-10-23 12:12:12');    -- | 1978-10-23 12:12:12 |
INSERT test_timestamp(a) VALUES('1278-10-23 12:12:12');    -- 报错
INSERT test_timestamp(a) VALUES(CURRENT_TIMESTAMP);            -- | 2019-09-06 16:19:03 |
INSERT test_timestamp(a) VALUES(NULL);                                    -- NULL
INSERT test_timestamp(a) VALUES();                                            -- 报错

YEAR

--测试YEAR
--1901~2155
--70~99:转换成1970~1999
--00~69:转换成2000~2069

CREATE TABLE test_year(
  a YEAR
);

INSERT test_year(a) VALUES(1901);    -- 1901
INSERT test_year(a) VALUES(0);        -- 0000
INSERT test_year(a) VALUES('0');    -- 2000