1、字符串数据类型
字符串数据类型共计6种,又分为字符串和Unicode字符串两类:
- 字符串:char、varchar、text
- Unicode字符串:nchar、nvarchar、ntext
2、数字数据类型
数字数据类型共有11种,大概可分为整数数据类型、decimal和numeric、货币类型、近似数字、bit类型
- 整数数据类型
数据类型 | 范围(有符号) | 存储 |
---|---|---|
bigint | -2^63 ~ 2^63-1 | 8字节 |
int | -2^31 ~ 2^31-1 | 4字节 |
smallint | -2^15 ~ 2^15-1 | 2字节 |
tinyint | -2^7 ~ 2^7-1 | 1字节 |
- decimal和numeric
decimal | numeric | |
---|---|---|
语法 | 字段名 decimal(M, D) | 字段名 numeric(M, D) |
含义 | M:表示有效数字的精度,范围为1~65 D:表示小数点后的位数,范围为0~30 | 同decimal |
实例 | 字段 decimal(5, 2) insert into 表 (字段) values (1.23); > 1.23 insert into 表 (字段) values (123.45); > 123.45 insert into 表 (字段) values (123.456); > 123.46 insert into 表 (字段) values (123.451); > 123.45 insert into 表 (字段) values (1234.56); > 999.99 insert into 表 (字段) values (-1234.56); > -999.99 | 字段 numeric(5, 2) insert into 表 (字段) values (1.23); > 1.23 insert into 表 (字段) values (123.45); > 123.45 insert into 表 (字段) values (123.456); > 123.46 insert into 表 (字段) values (123.451); > 123.45 insert into 表 (字段) values (1234.56); > 999.99 insert into 表 (字段)values (-1234.56); > -999.99 |
总结 | 当插入的整数部分的值超过了其表示范围后以最大值填充 | 同decimal |
说明 | 测试数据准确性基于mysql(5.1.73) | 同decimal |
- 货币类型
数据类型 | 范围 | 存储 |
---|---|---|
money | -922337203685477.5808 ~ 922337203685477.5807 | 8字节 |
smallmoney | -214748.3648 ~ 214748.3647 | 4字节 |
3、日期和时间数据类型
数据类型 | 范围 | 实例 |
---|---|---|
year | (1900, 2155] 1、使用4位字符串和数字表示。其范围从1901~2155。输入格式为'YYYY'或YYYY 2、使用2位字符串表示。'00'~'69'转换为2000~2069,‘70’~'99'转换为1970~1999 3、使用2位数字表示。1~69转换为2001~2069,70~99转换为1970~1999 | insert into 表 (字段) values (1900); > 0000 insert into 表 (字段) values (1901); > 1901 insert into 表 (字段) values (2156); > 0000 insert into 表 (字段) values (2155); > 2155 insert into 表 (字段) values (0); > 0000 insert into 表 (字段) values ('0'); > 2000 insert into 表 (字段) values ('000'); > 2000 insert into 表 (字段) values ('0000'); > 0000 insert into 表 (字段) values (69); > 2069 |
time | [-838:59:59 ~ 838:59:59] 1、'D HH:MM:SS'格式的字符串表示。 其中,D表示天数,取值范围是0~35。小时的值等于(D * 24 + HH) 2、'HHMMSS'格式的字符串或HHMMSS格式的数值表示 3、使用current_time、current_time()或new()输入当前系统时间 | insert into 表 (字段) values ('2 12:00:30'); > 60:00:30 insert into 表 (字段) values ('12:00:30'); > 12:00:30 insert into 表 (字段) values (120030); > 12:00:30 insert into 表 (字段) values ('120030'); > 12:00:30 insert into 表 (字段) values ('35 12:00:30'); > 838:59:59 insert into 表 (字段) values (0); > 00:00:00 insert into 表 (字段) values (current_time()); > 15:27:08 |
date | [1000-01-01 ~ 9999-12-31] 1、'YYYY-MM-DD'或'YYYYMMDD'格式的字符串表示 2、MySQL支持不严格的语法格式。 例如:'YYYY/MM/DD'、'YYYY@MM/DD'、'YY@MM.DD'等 3、'YY-MM-DD'或者'YYMMDD'格式的字符串表示。其中, 'YY'取值'00' ~ '69'转换为2000 ~ 2069, '70' ~ '99'转换为1970 ~ 19999 4、使用current_date、current_date()或now()获取当前系统的时间 | insert into 表 (字段) values ('2018-06-28'); > 2018-06-28 insert into 表 (字段) values ('20180628'); > 2018-06-28 insert into 表 (字段) values ('1000-01-01'); > 1000-01-01 insert into 表 (字段) values ('1000-00-00'); > 1000-00-00 insert into 表 (字段) values ('0000-00-00'); > 0000-00-00 insert into 表 (字段) values ('06-28'); > 0000-00-00 insert into 表 (字段) values ('2018-13-31'); > 0000-00-00 insert into 表 (字段) values ('9999-12-31'); > 9999-12-31 insert into 表 (字段) values (20180628); > 2018-06-28 insert into 表 (字段) values (1005); > 2000-10-05 insert into 表 (字段) values ('2018.06.28'); > 2018-06-28 insert into 表 (字段) values ('20180628 15:20:00'); > 0000-00-00 |
datetime | 1、'YYYY-MM-DD HH:MM:SS'或'YYYYMMDDHHMMSS'格式的字符串 2、MySQL支持不严格的语法格式。例如: 2018@06/28 16.03*10 3、'YY-MM-DD HH:MM:SS'或'YYMMDDHHMMSS'格式的字符串 其中, '00 ~ 69'转换为2000 ~ 2069,'79' ~ '99'转换为1970 ~ 1999 可使用不严格语法 4、使用now()获取当前系统的日期和时间 | insert into 表 (字段) values ('2018-06-28 16:03:10'); > 2018-06-28 16:03:10 insert into 表 (字段) values (20180628160310); > 2018-06-28 16:03:10 insert into 表 (字段) values ('9999-12-31 23:59:59'); > 9999-12-31 23:59:59 |
timestamp | 1、timestamp类型使用4个字节表示日期和时间 timestamp类型的范围是1970-01-01 08:00:01 ~ 2038-01-19 11:14:07 2、MySQL中以'YYYY-MM-DD HH:MM:SS'的形式显示timestamp类型的值 3、值为null时,系统会输入系统当前时间和日期 4、可使用current_timestamp或current_timestamp()获取体统当前时间 5、timestamp会根据不同时区进行时间转换,但时间范围比较小 6、MySQL支持不严格语法 | insert into 表 (字段) values (null); > 2018-06-28 16:30:10 insert into 表 (字段) values ('null'); > 0000-00-00 00:00:00 insert into 表 (字段) values (current_timestamp()) > 2018-06-28 16:30:10 insert into 表 (字段) values (20180628163010); > 2018-06-28 16:30:10 insert into 表 (字段) values ('20180628163010'); > 2018-06-28 16:30:10 insert into 表 (字段) values (180628163010); > 2018-06-28 16:30:10 |