MySQL 数值类型与字符类型

版权声明:请多多指教 https://blog.csdn.net/arctic_fox_cn/article/details/82391225

MySQL学习–2

一、数据类型(MySQL版本:5.7.23-0ubuntu0.18.04.1 )

​ 数值、字符、时间

​ 数值又包括整型,浮点数

​ 整数包括:tinyint-> 数值很小一个字节,smallint->两个字节,mediumint->三个字节,int->四个字节,big->8个字节;

mysql> describe number;
+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| n_tiny      | tinyint(4)   | NO   |     | NULL    |                |
| n_small     | smallint(6)  | NO   |     | NULL    |                |
| n_mediumint | mediumint(9) | NO   |     | NULL    |                |
| n_int       | int(11)      | NO   |     | NULL    |                |
| n_big       | bigint(20)   | NO   | PRI | NULL    | auto_increment |
+-------------+--------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)
/*这些类型值的默认大小根据系统而定,例如:int(11)表示MySQL显示11位数包括符号,但是前提条件是在4个字节内可以表示的数值范围,显示位数不影响实际大小;
----
无符号整数类型,范围增大  -128~127 无符号为 0~255
整数类型有一个专属属性  auto_increment 没有特殊要求顺序自动填充值,如果改变某处值下一个按照上一个顺序填充,一般搭配 primary key  例如n_big列
*/

浮点数包括:float ->四个字节,double->8个字节。

float #  多了一个精度问题,是小数点后显示多少位数,同整形
double#
/*
float double 类型的无符号类型不是范围增大,而是从0.0开始

*/

字符就是单个字符和字符串

字符类型分类:

char[(M)] #固定长度M,可省去为0,作为占位所用,如果所采集值不足M个向右添加空格,但是查找时不涉及空格问题
varchar(M)  #可变长度,当不够M个时,那就不够吧,不可省略M,总的长度为M+1还有一个错误位
#M最大
#例如:
mysql> describe class;
+-------+-----------------------+------+-----+---------+-------+
| Field | Type                  | Null | Key | Default | Extra |
+-------+-----------------------+------+-----+---------+-------+
| name  | varchar(20)           | NO   |     | NULL    |       |
| age   | int(10) unsigned      | NO   |     | NULL    |       |
| sex   | enum('male','female') | NO   |     | NULL    |       |
| birth | date                  | NO   |     | NULL    |       |
+-------+-----------------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

blob #binary large object  可以存储二进制文件 例如 图片
text #非二进制字符串 存储范围大
tinyblob,tinytext,mediumblob,mediumtext,longblob,longtext#类似与整形tiny等 主要是存储范围不同
enum #枚举  很有用的 在预先定义好的enum中选择数据,如果插入时没有选择enum类型中的值会报错,除了"" 和null  而且enum类型可以当作数值类型处理 最大可以表示 65525
set #最大 64位->8字节 而且AN!位位位!存储   
#例如:
mysql> describe s;
+-------+---------------------------------+------+-----+---------+-------+
| Field | Type                            | Null | Key | Default | Extra |
+-------+---------------------------------+------+-----+---------+-------+
| e     | enum('X','XL','L','XXl','XXXL') | YES  |     | NULL    |       |
+-------+---------------------------------+------+-----+---------+-------+
1 row in set (0.00 sec)
-----
mysql> insert into s values("X"),("XL"),("L"),("XXL"),("XXXL");
Query OK, 5 rows affected (0.03 sec)
Records: 5  Duplicates: 0  Warnings: 0

mysql> select e ,e+0,e+1,bin(e+0) from s;
+------+------+------+----------+
| e    | e+0  | e+1  | bin(e+0) |
+------+------+------+----------+
| X    |    1 |    2 | 1        |
| XL   |    2 |    3 | 10       |
| L    |    3 |    4 | 11       |
| XXl  |    4 |    5 | 100      |
| XXXL |    5 |    6 | 101      |
+------+------+------+----------+

#因为第一位要存储错误码,所以e开始为1
+-------+-------------------------------------------------------+------+-----+---------+-------+
| Field | Type                                                  | Null | Key | Default | Extra |
+-------+-------------------------------------------------------+------+-----+---------+-------+
| s     | set('alibaba','baidu','meituan','facebook','gooogle') | YES  |     | NULL    |       |
+-------+-------------------------------------------------------+------+-----+---------+-------+
mysql> select s ,s+0,s+1,bin(s+0) from h;
+----------+------+------+----------+
| s        | s+0  | s+1  | bin(s+0) |
+----------+------+------+----------+
| alibaba  |    1 |    2 | 1        |
| gooogle  |   16 |   17 | 10000    |
| facebook |    8 |    9 | 1000     |
| baidu    |    2 |    3 | 10       |
| meituan  |    4 |    5 | 100      |
+----------+------+------+----------+
5 rows in set (0.00 sec)


#从上面可以的到的是 google 为什么表示为16呢,因为按位算,google在我们定义的时候顺序为5,所以第5位填充1,其余没有则为0,所以google 10000 ->16  

猜你喜欢

转载自blog.csdn.net/arctic_fox_cn/article/details/82391225
今日推荐