#常见的数据类型
数值型:
整型
小数:
定点数
浮点数
字符型:
较短的文本:char、varchar
较长的文本:text、blob(较长的二进制数据)
日期型:
#一、整型
tinyint、smallint、mediumint、int/Integer、bigint
1 2 3 4 8字节
特点:
1.如果不设置无符号还是有符号,默认有符号。如果想设置无符号,在后面追加unsigned关键字
2.如果插入的数值超出了整型的范围,会报out of range异常,并且插入临界值
3.如果不设置长度,会有默认的长度
长度代表了显示的最大宽度,如果不够会用0在左边填充,但必须搭配zerofill使用
sigend 英文有符号的
#1.如何设置无符号和有符号 如:字段名 int nusigned
DROP TABLE IF EXISTS tab_int;
CREATE TABLE tab_int(
t1 INT,#说明默认是有符号的
t2 INT UNSIGNED
);
nusigned 设置为无符号
INSERT INTO tab_int VALUE(-456464,-548554);
#t2显示的是0 无符号的下线零界值 t2字段设置无符号
#比如int有符号最大取值21474836488,插入21474836489,字段填充为int型的临界值,因为有符号最大取值为21474836489
#2.如果插入的数值超出了整型的范围,会报out of range异常,并且插入临界值
INSERT INTO tab_int VALUE(21474836489,4294967296);
#3.设置为zerofill,长度7 用0填充
CREATE TABLE tab_int(
ZEROFILL,#zerofill默认0填充 不支持负数
ZEROFILL
);
#INT(7)后面括号的意思不是插入的长度最长是7位,而是显示的最大宽度,插入的范围由int smallint来决定的
#设置为zerofill,再进行填充
INSERT INTO tab_int VALUE(123,123);
#二、小数
分类:
1.浮点型
float(M,D)
double(M,D)
2.定点型
dec(M,D)
decimal(M,D)
特点:
Ⅰ.M和D
D:表是小数点后保留几位小数
如果插入值超出范围,则插入临界值
Ⅱ.M和D都可以省略
如果是decimal,则M默认为10,D默认位0
如果是float和double,则会根据插入的数值的精度来决定精度
Ⅲ.定点型的精确度较高,如果要求插入数值的精度较高如货币运算等则考虑使用
#一.M和D不省略(5,2)
CREATE TABLE tab_float(
f1 FLOAT(5,2),
f2 DOUBLE(5,2),
f3 DECIMAL(5,2)
);
INSERT INTO tab_float VALUE(123.45,123.45,123.45);
INSERT INTO tab_float VALUE(123.456,123.45,123.456);
INSERT INTO tab_float VALUE(123.4,123.4,123.4);
#(5,2)M是显示的宽度为5位,D是小数位 2位数,所以整数位是3位
#比如:插入1886四位就会出现异常 插入临界值 出现999.99 999.99 999.99
INSERT INTO tab_float VALUE(1886.8,1886.8,1886.8);
#二.M和D都可以省略
DROP TABLE tab_float;
CREATE TABLE tab_float(
f1 FLOAT,
f2 DOUBLE,
f3 DECIMAL
);
#float,double的类型,根据插入值的精度而去决定的 decimal默认(10,0)插入小数点就超出范围 将插入值四舍五入
123.5657);
#原则:所选择的类型越简单越好,能保存数值越小越好
#三、字符型
较短的文本:
char
varchar
其它:
binary和varbinary用于保存较端的二进制
enum用于保存枚举
set用于保存集合
较长的文本:
text
blob(较大的二进制)
特点:
写法 M的意思 特点 空间的耗费 效率
char char(M) 最大的字符数,可以省略,默认位1 固定长度的字符 比较耗费 高
varchar varchar(M) 最大的字符数,不可以省略 可变长度的字符 比较节省 低
#enum枚举类型
CREATE TABLE tab_char(
c1 ENUM('a','b','c') #只能插入abc 插入其它插入不进
);
INSERT INTO tab_char VALUE('a'),('b'),('C');
INSERT INTO tab_char VALUE('d');#枚举只能插入abc 定义的
#set类型 集合
CREATE TABLE tab_set(
s1 SET('a','b','c','d')
);
#插入的数据是set集合中的数据
INSERT INTO tab_set VALUE('a,b,c');
INSERT INTO tab_set VALUE('A,B');
CREATE TABLE tab_date(
t1 DATETIME,
t2 TIMESTAMP
#t2字段位 timestamp 类型
#我在东八区插入时间位2018-3-5 11:18 我将数据库的时区该+9:00东九区再去查看时间会多一个小时2018-3-5 12:18
);
SHOW VARIABLES LIKE 'time_zone'; #查看当前的时区
SET time_zone='+9:00';#设置时区为东九区