mysql数据类型
数据类型分类:数值类型 字符类型 日期时间类型 枚举类型
每种类型都有对应的命令表示、有具体的存储范围
比如存储: 身高 、 体重 、 工资 、 奖金 适合使用数值类型
比如存储: 姓名 、 家庭地址 、 收货地址 适合使用字符类型
比如存储: 生日 、 出生年份 、 入职时间 、 下班时间 、 注册时间 适合使用日期时间
比如存储: 爱好 、 性别 、 社保医院 适合使用枚举类型
3.1 字符类型 (存储汉字或英文字母)
char 定长类型(固定长度) 存储范围 1-255字符
varchar 变长类型(长度不固定) 存储范围 1-65535字符 (实际存储范围1-65532)
一个英文字母 是一个字符
一个汉字也是一个字符
char 和 varchar 共同点 都不能超出指定的字符个数
char 和 varchar 不同点 存储的字符个数小于指定的字符个数时处理的方式不一样,具体如下:
姓名 char(3)
a 补2个空格 凑够定义字符个数3
ab 补1个空格 凑够定义字符个数3
abc 正好够定义字符个数3 不补空格
adbc 超出了定义字符个数3 报错不让存
姓名 varchar(3)
a 不会补空格 直接就存a
ab 不会补空格 直接就存ab
abc 不会补空格 直接就存abc
adbc 超出了定义字符个数3 报错不让存
例子
建表
mysql> create table studb.t2(name char(3) , address varchar(5) );
查看表头
mysql> desc studb.t2;
+---------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+------------+------+-----+---------+-------+
| name | char(3) | YES | | NULL | |
| address | varchar(5) | YES | | NULL | |
+---------+------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
插入记录
mysql> insert into studb.t2 values ("a","a");
mysql> insert into studb.t2 values ("ab","ab");
mysql> insert into studb.t2 values ("abc","abc");
超出字符个数报错
mysql> insert into studb.t2 values ("abcd","abcd");
ERROR 1406 (22001): Data too long for column 'name' at row 1
默认不允许表头存储中文 要存储中文 建表 要指定表使用中文字符集
例子
#查看表使用的字符集
mysql> show create table studb.t1 \G
*************************** 1. row ***************************
Table: t1
Create Table: CREATE TABLE `t1` (
`level` tinyint(3) unsigned DEFAULT NULL,
`money` double DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 西欧字符编码
1 row in set (0.00 sec)
说明 :
ENGINE=InnoDB 定义存储引擎(存储引擎后边课程讲)
DEFAULT CHARSET=latin1 定义字符集 (默认字符集是 latin1 西方国家使用的字符编码)
#建表时指定表使用的字符集 utf8
mysql> create table studb.t3(
name char(3) , address varchar(10)
) default charset utf8;
查看字符集
mysql> show create table studb.t3 \G
*************************** 1. row ***************************
Table: t3
Create Table: CREATE TABLE `t3` (
`name` char(3) DEFAULT NULL,
`address` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
查看表头
mysql> desc studb.t3;
+---------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| name | char(3) | YES | | NULL | |
| address | varchar(10) | YES | | NULL | |
+---------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
插入记录
mysql> insert into studb.t3 values ("张翠山","武当山");
mysql> insert into studb.t3 values ("张三丰","武当山");
查看表记录
mysql> select * from studb.t3;
+-----------+-----------+
| name | address |
+-----------+-----------+
| 张翠山 | 武当山 |
| 张真人 | 武当山 |
+-----------+-----------+
2 rows in set (0.00 sec)
其他字符类型:用来存储视频、音频、图片、较大的文本
类 型 名称 范围
tinytext 短文本 0-255字节
tinyblob 二进制形式短文本字 0-255字节
text 长文本数据 0-65535字节
blob 二进制形式的长文本 0-65535字节
mediumblob 二进制形式的中等长度文本 0-16777215字节
mediumtext 中等长度文本数据 0-16777215字节
longblob 二进制形式极大文本 0-4284867295字节
longtext 极大文本 0-4284867295字节
3.2 数值类型 :表头存储数字,分为 整数类型 和 浮点类型 2种
整数类型(能存储正整数和负整数的类型) 例如 23(正整数) -23(负整数)
每种整数类型分为无符号存储范围和有符号存储范围
无符号存储范围起始数字从 数字零开始
有符号存储范围 可以存储负数
使用unsigned 命令定义使用数值类型的无符号存储范围
整数类型不存储小数,如果数字有小数的话会把小数部分四舍五入后只保存整数部分
| 类 型 | 名称 | 有符号范围 | 无符号范围 |
| tinyint | 微小整数 | -128~127 | 0 ~ 255 |
| smallint | 小整数 |-32768~32767 | 0 ~ 65535 |
|mediumint |中整型 |-223 ~ 223-1 |0 ~ 224-1 |
|int |大整型 |-231 ~ 231-1 |0 ~ 232-1 |
|bigint |极大整型 |-263 ~ 263-1 |0 ~ 264-1 |
unsigned 使用无符号存储范围
浮点类型(存储小数) 例如 23.22
类 型 名称 范围
float 单精度 8位精度(4字节)
double 双精度 16位精度(8字节)
#####################################################
例子
mysql> create table st1(级别 tinyint unsigned , 游戏币的钱数 double ) default charset utf8 ;
Query OK, 0 rows affected (0.00 sec)
mysql> desc st1;
+--------------------+---------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+---------------------+------+-----+---------+-------+
| 级别 | tinyint(3) unsigned | YES | | NULL | |
| 游戏币的钱数 | double | YES | | NULL | |
+--------------------+---------------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
mysql> insert into st1 values(12,34 );
Query OK, 1 row affected (0.01 sec)
mysql> select * from st1 ;
+--------+--------------------+
| 级别 | 游戏币的钱数 |
+--------+--------------------+
| 12 | 34 |
+--------+--------------------+
1 row in set (0.00 sec)
################################################
##################################################
3.3 枚举类型 表头值必须在类型规定的范围内选择
单选 enum(值1,值2,值3 ....) 只能选项范围内的任意一个
多选 set(值1,值2,值3 ....) 选项范围内的一个或多个
mysql> alter table st1 add 姓名 char(20) first ;
Query OK, 0 rows affected (0.09 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> alter table st1 add 性别 enum("男","女" );
Query OK, 0 rows affected (0.08 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc st1 ;
+--------------------+---------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+---------------------+------+-----+---------+-------+
| 姓名 | char(20) | YES | | NULL | |
| 级别 | tinyint(3) unsigned | YES | | NULL | |
| 游戏币的钱数 | double | YES | | NULL | |
| 性别 | enum('男','女') | YES | | NULL | |
+--------------------+---------------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
##############################
#############################
3.4 日期时间类型 存储日期时间格式的数据
类 型 名称 范围 赋值格式
year 年 1901~2155 例如 2022
date 日期 0001-01-01
9999-12-31 例如 20220318
time 时间 01:00:00
23:59:59 例如 091858
datetime 日期时间 1000-01-01 00:00:00~
9999-12-31 23:59:59 例如
20220819153819
timestamp 1970-01-01 00:00:00
2038-01-19 00:00:00
mysql> create table st5(姓名 char(10),生日 date,出生年份 year,家庭聚会 dateti me ,聚会地点 varchar(15),上班时间 time ) default charset utf8;
Query OK, 0 rows affected (0.05 sec)
mysql> desc st5;
+--------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+-------+
| 姓名 | char(10) | YES | | NULL | |
| 生日 | date | YES | | NULL | |
| 出生年份 | year(4) | YES | | NULL | |
| 家庭聚会 | datetime | YES | | NULL | |
| 聚会地点 | varchar(15) | YES | | NULL | |
| 上班时间 | time | YES | | NULL | |
+--------------+-------------+------+-----+---------+-------+
6 rows in set (0.00 sec)
mysql> insert into st5 values("翠花",20211120,1990,20220101183000,"吃的好",09000 0 );
Query OK, 1 row affected (0.00 sec)
mysql> mysql> select * from st5;
+--------+------------+--------------+---------------------+--------------+--------------+
| 姓名 | 生日 | 出生年份 | 家庭聚会 | 聚会地点 | 上班时间 |
+--------+------------+--------------+---------------------+--------------+--------------+
| 翠花 | 2021-11-20 | 1990 | 2022-01-01 18:30:00 | 吃的好 | 09:00:00 |
+--------+------------+--------------+---------------------+--------------+--------------+
1 row in set (0.00 sec)
mysql----数据类型
最新推荐文章于 2024-05-07 17:19:39 发布