Mysql常用的数据类型(列类型)
数值类型
- BIT(M):位类型,M指定位数,默认值:1,范围1-64
- TINYINT[UNSIGNED]占一个字节:带符号的范围是-128到127。无符号0到255。默认有符号。
- SMALLINT[UNSIGNED]占两个字节:带符号的是:负的215到215-1,无符号0到2^16-1
- MEDIUMINT[UNSIGNED]3个字节:带符号的是:负的223到223-1,无符号0到2^24-1
- INT[UNSIGNED]四个字节:带符号的是:负的231到231-1,无符号0到2^32-1
- BIGINT[UNSIGNED]8个字节:带符号的是 负的263到263-1,无符号0到2^64-1
- FLOAT[UNSIHNED]:占用空间4个字节
- DOUBLE[UNSIGNED]:表示比float精度更大的小数,占用空间8个字节
- DECIMAL(M,D)[UNSIGNED]:定点数M指定长度,D表示小数点位数
int例
#演示整型的一个
#使用tinyint来演示范围 -128---127 ,如果没有符号,则是0-255
#表的字符集,校验规则,存储引擎,使用默认的
#如果没有指定unsigned ,tinyint就是有符号的类型
CREATE TABLE t3(
id TINYINT
);
#INSERT INTO :添加指令
INSERT INTO t3 VALUES(-128);
SELECT*FROM t3;
#定义一个无符号的整数类型
CREATE TABLE T5(
id TINYINT UNSIGNED);
INSERT INTO t5 VALUES(0);
SELECT*FROM t5;
bit例
#演示bit类型的使用
#1. bit(m) m在1-64之间,如果我写了个8,就相当于占一个字节
#2. 添加数据 的范围,按照你给定的位数来确定,比如m=8,那就是1个字节,0-255,
#3. 显示按照 位(bit) 的方式显示
CREATE TABLE t6(num BIT(8));
INSERT INTO t6 VALUES(10);
SELECT *FROM t6;
#4.查询时也可以按照数字来查询
SELECT *FROM t6 WHERE num =255;
DECIMAL(M,D)[UNSIGNED]
#演示decimal类型,float,double的使用
#创建表
CREATE TABLE t07(
num1 FLOAT,
num2 DOUBLE,
num3 DECIMAL(30,20));
#向表中添加数据
INSERT INTO t07 VALUES(88.12345678,88.12345678,88.12345678)
SELECT *FROM t07;
#decimal能存放的数据是非常大的
CREATE TABLE t08(
num1 DECIMAL(65));
INSERT INTO t08 VALUES(123456789012345678901234567890);
SELECT *FROM t08;
字符串char varchar
#演示字符串类型char Varchar
#注释快捷键:shift+ctrl+c
#取消注释快捷键,shift+ctrl+r
-- char (size)
-- 固定长度字符串,最大255字符
--
-- Varchar (size) (0----65535)
-- 可变长度字符串,最大65532字节,[utf8编码最大21844字符,1-3个字节记录大小]
-- 如果表的编码是utf-8 varchar(size) size =65535 , 但要预留1-3个字节,(65535-3)/3=21844
-- 如果表的编码是gbk varchar(size) size =65535 , 但要预留1-3个字节,(65535-3)/2=32766
CREATE TABLE T09(
`name`CHAR (255));
CREATE TABLE t11(
`name` VARCHAR(32766) CHARSET gbk);
字符串的使用细节
#演示字符串类型的使用细节
#细节1
#char(4)
#这个4,表示的是字符数(最大255),而不是字节,不管是中文还是字母,都是放四个,按字符计算
#varchar(4)
#这个4,表示的是字符数,而不是字节,不管是中文还是字母,都是放四个,不管是中文还是字母都是以定义好的编码来存放数据
#utf8 4*3=12 字节 , gbk 4*2=8字节
CREATE TABLE t12(
`name`CHAR(4));
INSERT INTO t12 VALUES('abcd');
INSERT INTO t12 VALUES('赵钱孙李');
SELECT * FROM t12;
# 细节2
#char(4),是定长的,也就是说,即使你插入aa,也会占用分配的4个字符
#varchar(4),是变长的,也就是说,如果你插入了aa,实际占用的空间并不是四个字符,而是按照实际
#占用的空间来分配,注意:varchar本身还要占用1-3个字节来存储记录存放的长度
# 细节3
#什么时候用char,什么时候用varchar
-- 1.如果数据是定长,如:密码,邮箱,邮编,手机号,身份证号等等
-- 2.如果一个字段的长度是不确定的,如文章 ,留言板等等
#查询速度: char> varchar
#细节4
-- 在存放文本时,也可以使用Text,来代替varchar,
-- 注意:Text不能有默认值,大小:0---2^16
-- 如果希望存放更多的字符可以使用:
-- MEDIUMTEXT 0--2^24
-- 或
-- LONGTEXT 0-2^32
CREATE TABLE T13(content TEXT,content2 MEDIUMTEXT,content3 LONGTEXT);
INSERT INTO t13 VALUES('lyc学java','lyc学mysql','学习学习mysql10000');
SELECT *FROM t13;
文本,二进制类型
-
CHAR(size)char(20):固定长度字符串 最大255
-
VARCHAR(size) varchar(20):可变长度字符串0-65535[即:2^16-1]
-
BLOB LONGBLOB:二进制数据 BLOB:0~2^16-1 LONGBLOB:0~2^32-1
-
TEXT LONGTEXT :文本 Text:0~2^16 LONGTEXT:0-2^32
时间日期
#演示时间相关类型
#创建一张表,date,datatime,tamestamp
CREATE TABLE t15(
birthday DATE,#生日
job_time DATETIME,#记录年月日,时分秒
login_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP);
#登录时间,如果希望login_time自动更新,需要设置自动以当前时间更新
INSERT INTO t15(birthday,job_time)
VALUES('2022-11-11','2021-11-20 10:10:10');
#如果我们更新了t15表的某个字段,我们的login_time会自动的以当前时间进行更新
SELECT * FROM t15;
-
DATA
-
DATATIME:时间戳,它可用于自动记录insert,update操作的时间
-
TimeStamp
- 日期类型(YYYY-MM-DD,(YYYY-MM-DD HH:MM:SS),