MySQL数据类型
1. 数据类型分类
数据库中的类型决定了在存储位置中,占据的空间大小以及如何识别的问题。
2. 数值类型
2.1 tinyint类型
修改类型:
mysql> create table tt1(num tinyint);
Query OK, 0 rows affected (0.02 sec)
mysql> insert into tt1 values(128); -- 越界插入,报错
ERROR 1264 (22003): Out of range value for column 'num' at row 1
mysql> select * from tt1;
+------+
| num |
+------+
| 1 |
+------+
1 row in set (0.00 sec)
当我们插入数据的时候,数据本身是有自己的取值范围的,MySQL是不允许我们插入超出范围的数。——MySQL对于数据的存储有更严格的约束。
MySQL数据类型本身就是一种约束。
unsigned char c = -1;
// C中,这个语句不会报错,会让我们写入(但是写入后值对不对就是未知的)
// 内存空间只认识二进制,是先把-1转化为二进制
在MySQL中,整型可以指定是有符号的和无符号的,默认是有符号的。
可以通过UNSIGNED来说明某个字段是无符号的
无符号案例:
mysql> create table tt2(num tinyint unsigned);
mysql> insert into tt2 values(-1); -- 无符号,范围是: 0 - 255
ERROR 1264 (22003): Out of range value for column 'num' at row 1
mysql> insert into tt2 values(255);
Query OK, 1 row affected (0.02 sec)
mysql> select * from tt2;
+------+
| num |
+------+
| 255 |
+------+
1 row in set (0.00 sec)
注意:尽量不使用unsigned,对于int类型可能存放不下的数据,int unsigned同样可能存放不下,与其如此,还不如设计时,将int类型提升为bigint类型。
2.2 bit类型
bit[(M)] : 位字段类型。
M表示每个值的位数,范围从1到64。如果M被忽略,默认为1。
可以让我们对数据进行比特位的操作。
mysql> create table t2 ( id int, a bit(8));
Query OK, 0 rows affected (0.01 sec)
mysql> insert into t2 values(10, 10);
Query OK, 1 row affected (0.01 sec)
mysql> select * from t2; #发现很怪异的现象,a的数据10没有出现
+------+------+
| id | a |
+------+------+
| 10 | |
+------+------+
1 row in set (0.00 sec)
10的ASCII码是控制字符LF,控制字符不可显示。
bit使用的注意事项:
bit字段在显示时,是按照ASCII码对应的值显示。
mysql> insert into t2 values(65, 65);
mysql> select * from t2;
+------+------+