各个数据类型
数值类型分类

1、tinyint类型

查表结构
查看数据库内部的表名称

查看t1表创建时的语法细节

插入几个数据

如果我们向mysql特定的类型中插入不合法的数据,MySQL一般是直接拦截我们,不让我们做对应的操作。
反之,如果我们已经有数据被成功插入到mysql中了,一定插入的时候是合法的。
所以,mysql中,一般而言,数据类型本身也是一种:约束(倒逼程序员让程序员,让程序员尽可能进行正确的插入,约束:约束使用者,另外,如果你不是一个很好的使用者,mysql也能保证数据插入的合法性)。
设置足够多的约束,就能保证数据库中的数据是可预期的,完整的。
mysql表中建立属性列:列名称 类型在后。
num tinyint unsigned
2、bit类型

只有一个bit,所以不能插入了。

查看插入的数据

修改online

bit字段在显示时,是按照ASCII码对应的值显示。
mysql> insert into tt4 values(65, 65);
mysql> select * from tt4;
+------+------+
| id | a |
+------+------+
| 10 | |
| 65 | A |
+------+------+
如果我们有这样的值,只存放0或1,这时可以定义bit(1)。这样可以节省空间。
mysql> create table tt5(gender bit(1));
mysql> insert into tt5 values(0);
Query OK, 1 row affected (0.00 sec)
mysql> insert into tt5 values(1);
Query OK, 1 row affected (0.00 sec)
mysql> insert into tt5 values(2); -- 当插入2时,已经越界了
ERROR 1406 (22001): Data too long for column 'gender' at row 1
bit(M) : 位字段类型。M表示每个值的位数,范围从1到64。如果M被忽略,默认为1。
超出范围就会报错
3、小数类型
(1)float
float(m, d) unsigned : M指定显示长度,d指定小数位数,占用空间4个字节
例如:float(4,2)表示:
数字整体最多占4位,包括整数和小数。2表示:小数点后面
固定保留两位小数。
浮点数范围是:-99.99~99.99

查看表,字段、类型,约束

插入数据

无符号的:


检验其范围:

由下图可以知道,无符号的float,加 UNSIGNED 后:
直接去掉负数了

(2)decimal
用法: decimal(m, d) unsigned : 定点数m指定长度,d表示小数点的位数
decimal(5,2) 表示的范围是 -999.99 ~ 999.99
decimal(5,2) unsigned 表示的范围 0 ~ 999.99
decimal和float很像,但是有区别:
float和decimal表示的精度不一样
例如:
mysql> create table tt8 ( id int, salary float(10,8), salary2
decimal(10,8));
mysql> insert into tt8 values(100,23.12345612, 23.12345612);
Query OK, 1 row affected (0.00 sec)
mysql> select * from tt8;
+------+-------------+-------------+
| id | salary | salary2 |
+------+-------------+-------------+
| 100 | 23.12345695 | 23.12345612 | # 发现decimal的精度更准确,因此如果我们希望某
个数据表示高精度,选择decimal
+------+-------------+-------------+
说明:float表示的精度大约是7位。
decimal整数最大位数m为65。支持小数最大位数d是30。如果d被省略,默认为0.如果m被省略,
默认是10。
建议:如果希望小数的精度高,推荐使用decimal。
4、字符串类型
(1)char
char(L): 固定长度字符串,L是可以存储的长度,单位为字符,最大长度值可以为255

插入字符串长度是有限制的。

插入的结果是:

char(2) 表示可以存放两个字符,可以是字母或汉字,但是不能超过2个, 最多只能是255
(2)varchar
varchar(L): 可变长度字符串,L表示字符长度,最大长度65535个字节

判断设置的varchar的边界,如下图:设置的正好是6个,汉字算一个字符,标点符号也算是一个字符


关于varchar(len),len到底是多大,这个len值,和表的编码密切相关。
varchar长度可以指定为0到65535之间的值,但是有1 - 3 个字节用于记录数据大小,所以说有效字
节数是65532。
当我们的表的编码是utf8时,varchar(n)的参数n最大值是65532/3=21844因为utf中,一个字符占**
**用3个字节,如果编码是gbk,varchar(n)的参数n最大是65532/2=32766(因为gbk中,一个字符
占用2字节)。
验证varchar的大小长度:

mysql> create table tt11(name varchar(21845))charset=utf8; --验证了utf8确实是不
能超过21844
ERROR 1118 (42000): Row size too large. The maximum row size for the used
table type, not counting BLOBs, is 65535. You have to change some columns to
TEXT or BLOBs
mysql> create table tt11(name varchar(21844)) charset=utf8;
Query OK, 0 rows affected (0.01 sec)
char和varchar的区别:
-
存储长度机制 char (n):固定占用 n 个字符位置,存入内容不足 n 位时,末尾自动填充空格补齐; varchar (n):最多容纳 n 个字符,存多少占用多少位置,不会额外补空格。
-
存储空间开销 char 空间大小完全固定;varchar 除了存储文本,会多 1~2 字节用来记录实际字符长度,整体数据参差不齐时更省磁盘。
-
尾部空格处理 char 查询返回时会自动截断末尾填充的空格;varchar 输入的空格会完整保存、原样读取。
-
查询性能 char 长度规整,数据库寻址读取更快;varchar 需要读取长度标识,速度略逊一筹。
-
使用场景 char 适合长度稳定不变的数据,如手机号、身份证号、状态码; varchar 适合长短差异大的内容,如姓名、地址、备注、描述文字。
(3)日期和时间类型
常用的日期有如下三个:
date :日期 'yyyy-mm-dd' ,占用三字节
datetime 时间日期格式 'yyyy-mm-dd HH:ii:ss' 表示范围从 1000 到 9999 ,占用八字节
timestamp :时间戳,从1970年开始的 yyyy-mm-dd HH:ii:ss 格式和 datetime 完全一致,占用
四字节
创建一个数据表
插入数据
插入的结果是
5、enum和set
语法:
enum:枚举,"单选类型"
enum('选项1','选项2','选项3',...);enum也可以以1,2 这样的下标插入(选择)
set:集合,"多选"类型
set('选项值1','选项值2','选项值3',...);

查看数据表votes的结构

插入数据








