Mysql-数据类型
in PHP with 3 comments

Mysql-数据类型

in PHP with 3 comments

Mysql-数据类型

说明

说明:本文给大家介绍Mysql-数据类型的相关知识,本章是mysql的重点,希望大家可以好好学习。


mysql数据类一览表

分类数据类型说明
数值类型 bit(M) 位类型.M指定位数,默认值1,范围1-64
tinyint[unsigned] 带符号的范围是-128到127,无符号0到255,默认是有符号
BOOL,BOOLEAN 使用0或1表示真或假
smallint[unsigned] 带符号的是负的2的15次方-1到正的2的15次方-1,不带符号是0到2的16次方-1
int[unsigned] 带符号的是负的2的31次方-1到正的2的31次方-1,不带符号是0到2的32次方-1
bigint[unsigned] 带符号的是负的2的63次方-1到正的2的63次方-1,不带符号是0到2的64次方-1
float(M,D)[unsigned] M指的是显示长度,D指定小数点位数,占用空间4个字节
double(M,D)[unsigned] M指的是显示长度,D指定小数点位数,比float能表示更高的精度,占用空间8个字节
decimal(M,D)[unsigned] M指的是显示长度,D指定小数点位数
文本、二进制类型 char(size) 固定长度字符串 最大255
varchar(size) 可变长度字符串,最大65532【mysql5.0为21844】
BLOG LONGBLOG 二进制数据
TEXT LONGTEXT 大文本,不支持全文索引,不支持默认值,建议使用varchar
时间日期 DATE/DATETIME/TimeStamp 日期类型(YYYY-MM-DD)(YYYY-MM-DD HH:MM:SS),TimeStamp表示时间戳
string类型 ENUM类型(枚举) enum是一个字符串对象,其值来自表创建是在列规定中显示枚举的一列值
SET类型(集合) set是一个字符串对象,各个成员之间用逗号隔开,可以用FIND_IN_SET()函数或like操作符搜索set值

数值类型-整形

基本介绍: 用于保存整数的数据类型,常见有(tinyint , smallint , mediumint, int , bigint)

介绍
类型 字节 最小值 最大值
(带符号的/无符号的) (带符号的/无符号的)
TINYINT 1 -128 127
0 255
SMALLINT 2 -32768 32767
0 65535
MEDIUMINT 3 -8388608 8388607
0 16777215
INT 4 -2147483548 2147483547
0 4294967295
BIGINT 8 -9223372036854775808 -9223372036854775807
0 18446744073709551615

1.从表示的访问来看tinyint<smailint<mediumint<int<bigint
2.数据类型占用的大小不一样 tinyint(1个字节)<smailint(2个字节)<mediumit(3个字节)<int(4个字节)<bigint(8个字节)
3.整形分为两种,一种是有符号的,一种是无符号的。

unsigned(无符号)

mysql> create table test2 ( id int(4) , age int(2) unsigned);
Query OK, 0 rows affected (0.05 sec)

mysql> insert into test2 values(3,3);
Query OK, 1 row affected (0.00 sec)

mysql> insert into test2 values(3,-3);
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> select * from test2;
+------+------+
| id   | age  |
+------+------+
|    3 |    3 |
|    3 |    0 |
+------+------+
2 rows in set (0.00 sec)

mysql> select version();
+-------------------------+
| version()               |
+-------------------------+
| 5.6.33-0ubuntu0.14.04.1 |
+-------------------------+
1 row in set (0.02 sec)

mysql> insert into test2 values(-3,-3);
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> select * from test2;
+------+------+
| id   | age  |
+------+------+
|    3 |    3 |
|    3 |    0 |
|   -3 |    0 |
+------+------+
3 rows in set (0.00 sec)

说明:
1.可以通过定义unsigned来限制数值类型的范围
2.默认是有符号的。可以存储负值

解释一下整数范围的原因(深入)

以 tinyint 为说明:

tinyint 1 -128 127  有符号
           0   255  无符号

无符号0-255

tinyint是一个字节,一个字节是8位,所以最大就是【111111111】
计算方式: 1.【 1*2 的0次方+1*2的1次方法+1*2的2次方法...+1*2的7次方法=255 】
         2. 255其实就是2的8次方-1
tintyint 最小[000000000]=>0

最后范围就是0-255

有符号-128-127
说明二进制的最左边的那个数是可以表示符号的1负数 0=>正数

tinyint有符号时为什么可以表示127
0111111 => 127
?tinyint有符号时为什么可以表示-128
11111111=>-127
zerofill(0填充)
mysql> create table test(
    -> num1 int,
    -> num2 int(4) zerofill,
    -> num3 int(4) unsigned zerofill);
Query OK, 0 rows affected (0.11 sec)

mysql> insert into test values(1,1,-1);
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> select * from test;
+------+------+------+
| num1 | num2 | num3 |
+------+------+------+
|    1 | 0001 | 0000 |
+------+------+------+
1 row in set (0.00 sec)

说明:
1.当int(4) zerofill 使用,如果添加的整数不够4位,则数值的左边使用0进行填充
2.int(4) 不能理解成最大只能是4位的数,而应该理解成是0填充的宽度.
3.当一个字段被zerofill 修饰时,那么这个字段就自动成为unsigned

mysql数值类型-小数

在mysql中使用的最多的是float , decimal.

介绍

float(M,D)[unsignde]
M指定显示长度,D指定小数点后几位
小数;float(4,2) 表示的范围是-99.99 - 99.99
float(4,2) unsigned 表示的范围是 0-99.99

double(M,D)[unsignde]
M指定显示长度,D指定小数点后几位
小数:double(5,2) 表示的范围是-999.99-999.99
double(5,2) unsigned 表示的范围是0-999.99

细节说明

1.float(M,D)[unsigned]
单精度浮点数精确大约7位小数位
2.decimal(M,D)[unsigned]
可以支持更加精确地小位数,M指定显示长度,D指定小数点后几位。如果D是0,则值没有小数点或分数部分。decimal整数最大位数(M)是65。支持的十进制数的最大位数(D)是30。如果D被省略,默认是0。如果M被省略,默认是10。
3.如果我们希望保存精度更高的值,我们应该选择decimal。

mysql数值类型-字符串

mysql的字符串类型,用于存放字符串,最主要的有三种, 分别是 char, varchar, text

char,varchar设值范围
  char(n) 这里的 n 的范围是 1-255, 最大255.

  varchar(n) 这里的 n的范围是和表的字符集有关系. 
  如果表的字符集是 utf8 那么 n 最大是  (65535-3)/3 = 21844
  如果表的字符集是 gbk 那么 n 最大是  (65535-3)/2 = 32766
  如果表的字符集是 latin1 那么 n 最大是  (65535-3)/1 = 65532
  解释:
  varchar最大是有65535个字节, 但是需要预留3个字节.[有2个字节用于记录varchar的数据大小,有1个字节标识是否允许为null]
  因为utf8 一个字符占用3个字节,因此除以3
  因为gbk 一个字符占用2个字节,因此除以2
  因为gbk 一个字符占用1个字节,因此除以1
char(n),varchar(n) n代指的是字符数

char(n) 和 varchar(n) n 指的是 字符数而不是字节数.

char(n) 是定长, varchar(n) 是变长

举例说明
char(4) => 添加 'aa' => 实际暂用的空间,就是4个字符占用的空间.
varchar(4) => 添加 'aa' =>实际暂用的空间,就是2个字符占用的空间+1
使用建议
如果字段为定长,建议使用char,身份证号、手机号、等。char的查询速度要快
如果字段的长度不确定,如名字、住址、描述等。

text

text 数据类型可以视为varchar, 但是不用指定大小, 他可以存放varchar最大的范围

mysql数值类型-日期和时间

在mysql中,日期和时间类型主要有 date, datetime timestamp

对于date 类型只是接受 日期 , datetime timestamp 有日期和时间,如果你没有给时间,那么默认是 00:00:00
注意点:
timestamp 在insert 和 update 时会自动的更新

mysql数据类型-枚举enum, 集合set

如果对于多选我们可以使用 set 数据类型,如果对于单选我们可以使用 enum 数据类型

创建语法
CREATE TABLE `t_user` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(30) NOT NULL COMMENT '姓名',
  `age` int(3) unsigned NOT NULL COMMENT '年龄',
  `hobby` set('篮球','足球','乒乓球','羽毛球') DEFAULT NULL COMMENT '爱好',
  `sex` enum('男','女','其他') DEFAULT NULL COMMENT '性别',
  `desc` varchar(255) DEFAULT NULL COMMENT '描述',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户表'
insert into `t_user` ( `name`, `age`, `hobby`, `sex`, `desc`) values ( 'zhangsan', '24', '篮球,足球', '女', '如花似玉');
其他说明

1、首先你添加的选项都是表中规定好的, 添加 set 字段时 '选项1,选项2,选项3',但是中间不能给空格.
2、在enum 选项中,选项可以用数字表示,男,女,其他 分别代表1 2 3,我们可以这样写sql语句

insert into `t_user` ( `name`, `age`, `hobby`, `sex`, `desc`) values ( 'zhangsan', '24', '篮球,足球', '2', '如花似玉');

3.在set选项中,同样可以用数字表示,'篮球','足球','乒乓球','羽毛球' 分别代表1 2 3 4,我们可以这样写sql语句

insert into `t_user` ( `name`, `age`, `hobby`, `sex`, `desc`) values ( 'zhangsan', '24', '3', '2', '如花似玉');
3=1+2=篮球+足球
查询多选框

查询喜欢打篮球的人:

select *, FIND_IN_SET('篮球',hobby) from t_user 

图片,电影,音频数据类型怎么存放

对于图片,电影,音频这样的数据,我们通常不会直接存在在数据库中,而是记录该文件的路径,然后通过路径去读取该文件.

基础创建集合

CREATE TABLE `t_user` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(30) NOT NULL COMMENT '姓名',
  `age` int(3) unsigned NOT NULL COMMENT '年龄',
  `hobby` set('篮球','足球','乒乓球','羽毛球') DEFAULT NULL COMMENT '爱好',
  `sex` enum('男','女','其他') DEFAULT NULL COMMENT '性别',
  `desc` varchar(255) DEFAULT NULL COMMENT '描述',
  `salary` decimal(10,2) unsigned DEFAULT NULL COMMENT '工资',
  `idcard` char(18) DEFAULT NULL COMMENT '身份证号',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COMMENT='用户表'

总结

以上就是对Mysql-数据类型的相关介绍,大家有什么问题可以给博主留言。

结尾

腹有诗书气自华,最是书香能致远。

Responses
  1. 你的HTTPS不安全呐...能不能搞一个安全的证书?

    https://github.com/Neilpang/acme.sh

    https://freessl.cn/apply

    上面两种方式都可以申请,自己折腾去吧.

    Reply
    1. @你个

      证书是安全的,可能是我这边有http连接的缘故吧,我试试你这个,真棒,给你点赞。

      Reply
    2. @你个

      超级棒,证书好了

      Reply