MySQL常见的数据类型有:整数型,定点型,浮点型,字符串,时间,布尔,位
## 整数型:
tinyint:2的8次方
smallint:2的16次方
mediumint:2的32次方
integer:2的64次方
bigint:2的128次方
int[M] [unsigned] [zerofill]:M为位数,默认为10,unsigned表示只能为正数(包括0),zerofill默认只能为正数,填充0
create table t1(id int zerofill);
insert into t1 values(-1); --报错--
insert into t1 values(0);
insert into t1 values(123.523);
select * from t1; --输出:0,124(忽略小数,四舍五入)--
定点数(小数):
decimal=dec
dec(M,N):表示总共M位数字,其中N位位小数,(M-N)位为整数
create table t2(dec(5,3) unsigned); --定义整数位为2位,小数位为3位的定点数--
insert into t2 values(123.123); --报错--
insert into t2 values(12);
insert into t2 values (12.1235);
insert into t2 values(12.12);
select * from t2; --输出:12,12.123,12.120--
浮点型:
float(单精度):从第7位有效位开始四舍五入存储
double(双精度):从第16 位有效位开始四舍五入存储
create table t3(id float(8));
insert into t3 values(1234567);
insert into t3 values(123456789);
insert into t3 values(123456789.12345);
select * from t3; --输出:1234570,123457000,123457000--
create table t_3(id float(5,3));
insert into t_3 values(123); --报错--
insert into t_3 values(12.3);
insert into t_3 values(12.255555);
select * from t_3; --输出:12.3,12.256--
字符串:
char:固定长度,最多255个字符(2的8次方)
varchar:固定长度,最多65535个字符(2的16次方)
tinytext:可变长度,最多255个字符
text:可变长度,最多65535个字符
mediumtext:可变长度,最多2的24次方个字符
longtext:可变长度,最多2的32次方个字符
create table t4(name varchar(21));
insert into t4 values(123);
insert into t4 values(xiaoming); --报错--
insert into t4 values('xiaoming'dsad'); --报错--
insert into t4 values('xiaoming');
insert into t4 values('xiao'''ming);
select * from t4; --输出:123,xiaoming,xiao'ming--
char和varchar的区别:
1、char(n)若存入的字符数小于n,则以空格在字符串后面补充,查询之时再将空格去掉,所有char类型存储的字符串末尾不能有空格,varchar不限于此
2、char固定长度,char(4)不管存入几个字符,都将占用4个字节,varchar是存入的实际字节数+1个字节或2个字节,所以varchar(4),存入3个字节,实际占用4个字节
3、char检索速度比varchar速度快
日期时间区:
日期:2019-12-12
时间:12:23:23
日期时间:2019-12-12 12:12:12
timestamp:自动存储记录修改时间(如果数据库里面用timestamp数据类型,就应该考虑时区问题)
create table t5(d1 date);
insert into t5 values(19990101);
insert into t5 values(990101);
insert into t5 values(99101); --报错--
select * from t5; --输出:1999-01-01,1999-01-01---
获得当前日期时间的函数:
1、获得当前日期+时间(date+time)函数:now(),sysdate()
区别:now()在执行开始时值就得到了,sysdate()在函数执行时动态得到值
select now(),sleep(4),now(); --2019-01-01 *02:01:23* , 0 , 2019-01-01 *02:01:23*--
select sysdate(),sleep(4),sysdate(); --2019-01-01 *02:01:23* , 0 , 2019-01-01 *02:01:26*--
2、获得当前日期curdate(),获得当前时间curtime()
select curdate(),curtime();
1)、日期字符串转换函数format:
date_format(date,format) --将日期date按照给顶的模式format转换成字符串
time_format(time,format) --将时间time按照给顶的模式format转换成字符串
select date_format(now(),'%W %M %Y'); --Thursday June 2019--
select time_format(now(),'%Y%m%d%H%i%s'); -- 00000000210159--
select time_format(now(),'%H.%i.%s'); --21.03.07--
2)、日期字符转换函数
str_to_date(str,format) --将字符串以指定的模式format转换成日期
select str_to_date('01,5,2017','%d,%m,%Y'); --2017-05-01
select str_to_date(''May 1,2013,'%M %d,%Y'); --2013-05-01
3)、获得当前UTC日期时间函数:utc_date(),utc_time(),utc_timestamp()
select utc_timestamp(),utc_date(),utc_time(); -- 2019-06-27 13:22:32 , 2019-06-27 , 13:22:32
布尔:
insert into t7 values(true);
insert into t7 values(false);
insert into t7 values(123);
insert into t7 values(127);
insert into t7 values(128); --报错,范围在-128~127--
select * from t7; --1,0,123,127,--
位:
bin() --显示二进制格式
hex() --显示十六进制格式
create table t8(id bit(4));
insert into t8 values(2);
insert inro t8 values(13);
select bin(id),hax(id) from t8; --10,1101----2,D--