各自努力,最高处见!加油!


MySQL数据类型

  • 一、数据类型分类表
  • 二、数值类型
  • 1、整型
  • 2、bit型
  • 3、小数类型
  • 二、二进制类型
  • 什么时候用char,什么时候用varchar
  • 三、时间类型


一、数据类型分类表

mysql数据库编码和字段编码 mysql编号用什么数据类型_database

代码均要在mysql命令行下执行

二、数值类型

1、整型

以tinyint为例,其余同理
tinyint 类型数据有符号的范围-128 ~ 127,没有符号0 ~ 255。没有指定unsigned就是有符号的

#创建t3表,里面有名为id的变量,tinyint类型的
CREATE TABLE t3(
				id TINYINT);

CREATE TABLE t4(
				id TINYINT UNSIGNED);

#添加语句,往表中添加数据
INSERT INTO t3 VALUES(127);

#显示表
SELECT * FROM t3

2、bit型

范围在1~64,显示以二进制形式显示。

如果一个数据只有0,1 两个值,可以考虑使用bit(1)可以节约空间。

mysql数据库编码和字段编码 mysql编号用什么数据类型_mysql数据库编码和字段编码_02

#创建表,括号中的数字为指定位数。
CREATE TABLE t05(num BLT(8));
#添加数据
INSERT INTO t05 VALUES(1,3);
#显示表
SELECT * FROM t05;
#查找的时候仍然可以按照10进制数来查找
SELECT * FROM t05 WHERE num=1;

3、小数类型

  • FLOAT 单精度
  • DOUBLE 双精度
  • DECIMAL(M,D),M表示长度,D表示小数后的位数。M最大是65,D最大是30.如果D为0,则没有小数点。如果D被省略,默认为0
    。如果M被省略,默认为10 。
#创建表
CREATE TABLE t06(
					num1 FLOAT,
					num2 DOUBLE,
					num3 DECIMAL(30,20));
#添加数据
INSERT INO t06 VALUES(88.12345678912345, 88.12345678912345,88.12345678912345);

SELECT * FROM t06;


#decimal可以存放很大的数
CREATE TABLE t07 (
	num DECIMAL(65));
INSERT INTO t07 VALUES(8999999933338388388383838838383009338388383838383838383);

SELECT * FROM t07;
CREATE TABLE t08(
	num BIGINT UNSIGNED)
INSERT INTO t08 VALUES(8999999933338388388383838838383009338388383838383838383);
SELECT * FROM t08;

二、二进制类型

在存放文本时,也可以使用TEXT数据类型(可以视为VARCHAR列),注意text不能有默认值,大小为0-2^16。

char固定长度字符串0~255字符。
注意:
char(4) 这个4表示字符数(最大255),不是字节数,不管是中文还是字母都放四个,按字符计算。
char(4)是定长(固定的大小),就是说,即使插入’aa’,也会占用分配的4个字符空间

varchar可变长度字符串 0~65535字节,注意这里是字节为单位。
Varchar(4) 这个4表示字符数,不管是字母还是中文都以定义好的表的编码来存放数据utf8.这四个字符占多少字节取决于编码方式。
Varchar(4) 是变长,如果插入了‘aa’,实际占用空间大小并不是4个字符,而是按照实际占用的空间来分配。(另外:varchar本身还需要占用1-3个字节来记录存放内容长度)

【1-3个字节用于记录大小】

  • 如果表的编码是 utf8 varchar(size) size = (65535-3) / 3 = 21844
  • 如果表的编码是 gbk varchar(size) size = (65535-3) / 2 = 32766

什么时候用char,什么时候用varchar

  • 如果数据是定长,推荐使用char,如md5的密码,邮编,手机号,身份证号
  • 如果字段不是定长使用varchar,如留言,文章。
  • 查询速度:char>varchar.
#固定长度字符串 0~255 字符<<-字符
CHAR(size)


#可变长度字符串 0~65535字节<<-字节,注意这里是字节为单位
VARCHAR(size)

#创建表,存有name变量,大小为255.
CREATE TABLE t09 (
	`name` CHAR(255));
	
#创建表,存有name变量,以gbk规则编码,大小为32766.
CREATE TABLE t10 (
	`name` VARCHAR(32766)) CHARSET gbk;

DROP TABLE t10;

#韩老师课程笔记:
#char(4) 和 varchar(4) 这个4表示的是字符,而不是字节, 不区分字符是汉字还是字母
CREATE TABLE t11(
	`name` CHAR(4));
INSERT INTO t11 VALUES('韩顺平好');

SELECT * FROM t11;

CREATE TABLE t12(
	`name` VARCHAR(4));
INSERT INTO t12 VALUES('韩顺平好');
INSERT INTO t12 VALUES('ab北京');
SELECT * FROM t12;

#如果varchar 不够用,可以考试使用mediumtext 或者longtext, 
#如果想简单点,可以使用直接使用text
CREATE TABLE t13( content TEXT, content2 MEDIUMTEXT , content3 LONGTEXT);
INSERT INTO t13 VALUES('韩顺平教育', '韩顺平教育100', '韩顺平教育1000~~');
SELECT * FROM t13;

三、时间类型

基本使用

CREATE TABLE birthday6(t1 DATE, 
									  t2 DATETIME,
									  t3 TIMESTAMP NOT NULL DEFAULT 
									  CURRENT_TIMESTAMP ON UPDATE
									  CURRENT_TIMESTAMP);timestamp时间戳

mysql> INSERT INTO birthday(t1,t2)
VALUES('2022-11-11','2022-11-11 10:10:10');

细节说明:
TimeStamp在Insert和update时,自动更新

#韩老师笔记:
#创建一张表, date , datetime , timestamp
CREATE TABLE t14 (
	birthday DATE , -- 生日
	job_time DATETIME, -- 记录年月日 时分秒
	login_time TIMESTAMP 
		NOT NULL DEFAULT CURRENT_TIMESTAMP #以当前时间更新
		ON UPDATE CURRENT_TIMESTAMP); -- 登录时间, 如果希望login_time列自动更新, 需要配置
		
SELECT * FROM t14;
INSERT INTO t14(birthday, job_time) 
	VALUES('2022-11-11','2022-11-11 10:10:10');
-- 如果我们更新 t14表的某条记录,login_time列会自动的以当前时间进行更新