所谓数字类型大致分为以下几种:
每种类型都有不同的范围及其最大最小值。
可以针对不同整数类型插入值,而每个类型都有其范围,超过范围即无法插入。
创建整数类型
CREATE TABLE number(
a TINYINT,
b SMALLINT,
c MEDIUMINT,
d INT,
e BIGINT);
mysql> INSERT INTO
-> number(a)
-> VALUES(127);
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO
-> number(a)
-> VALUES(128);
ERROR 1264 (22003): Out of range value for column 'a' at row 1
改VALUES(-128)後。
mysql> SELECT * FROM number;
+------+------+------+------+------+
| a | b | c | d | e |
+------+------+------+------+------+
| 127 | NULL | NULL | NULL | NULL |
| -128 | NULL | NULL | NULL | NULL |
+------+------+------+------+------+
再来是精确值(Fixed point types)主要为DECIMAL的类型,在储存钱相关数值
,建议使用他。
其分为两个参数,第一个参数为总位数(包括小数点)
,第二个为小数保留几位
DECIMAL( 4 , 2 )
mysql> CREATE table number2(
-> salary DECIMAL
-> (5,2));
Query OK, 0 rows affected (0.12 sec)
此时插入数值。
mysql> INSERT INTO
-> number2(salary)
-> values(57);
Query OK, 1 row affected (0.01 sec)
发现已经呈现小数後两位。
mysql> SELECT * FROM number2;
+--------+
| salary |
+--------+
| 57.00 |
+--------+
1 row in set (0.00 sec)
当看到 ..., 1 row affected, 1 warning (0.01 sec)
有warning之讯息,要紧接着输入SHOW WARNINGS,否则无法显示warning讯息
。
mysql> SHOW WARNINGS;
+-------+------+---------------------------------------------+
| Level | Code | Message |
+-------+------+---------------------------------------------+
| Note | 1265 | Data truncated for column 'salary' at row 1 |
+-------+------+---------------------------------------------+
1 row in set (0.00 sec)
当我们插入超过总位数的数值时,系统会回报警告。
mysql> INSERT INTO
-> number2(salary)
-> values(88.5151);
Query OK, 1 row affected, 1 warning (0.01 sec)
利用 SHOW WARNINGS显示其讯息,结果的部分,系统会将多余的小数位四舍五入
。
mysql> SHOW WARNINGS;
+------+------+---------------------------------------------+
| Level | Code | Message |
+-------+------+---------------------------------------------+
| Note | 1265 | Data truncated for column 'salary' at row 1 |
+-------+------+---------------------------------------------+
1 row in set (0.00 sec)
+---------+
| salary |
+---------+
| 57.00 |
| 8.20 |
| 42.52 |
| 88.52 | (原本为88.5151)
浮点数类型(Floating point type)分为 FLOAT(单精度)、DOUBLE(双精度)两种类型。
CREATE TABLE number3(
a FLOAT,
b DOUBLE);
如果在创建float、double时,没有加入参数,在插入较大之值时会有误差,
故与DECIMAL一样要插入参数。
mysql> CREATE TABLE number5
-> (a float(8,3),
-> b double(7,4));
Query OK, 0 rows affected (0.32 sec)
mysql> INSERT INTO
-> number5(a,b)
-> values(123.151,155.122);
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM number5;
+---------+----------+
| a | b |
+---------+----------+
| 123.151 | 155.1220 |
+---------+----------+
1 row in set (0.00 sec)
此处会详细说明为何Float类型数值会有误差。https://dev.mysql.com/doc/refman/8.0/en/problems-with-float.html
所谓Bit value type顾名思义为二进制(BIT)类型。
mysql> CREATE TABLE number6(a BIT);
Query OK, 0 rows affected (0.07 sec)
在插入值时,由於是1Bit,故无法插入0、1之外的数值,除非在建立时做修改增加长度。
mysql> INSERT INTO number6(a) values(0);
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO number6(a) values(1);
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO number6(a) values(2);
ERROR 1406 (22001): Data too long for column 'a' at row 1
而在显示值时,会为空,因为我们显示的是十进制。
mysql> SELECT * FROM number6;
+------+
| a |
+------+
| |
| |
+------+
2 rows in set (0.00 sec)
将改成二进制(+0变成十进制)後,即可正常显示。
mysql> SELECT (a+0) FROM number6;
+-------+
| (a+0) |
+-------+
| 0 |
| 1 |
+-------+
2 rows in set (0.01 sec)
在显示结果时,可改变其显示方式,以二进制(BIN)、十六进制(HEX)呈现等。
mysql> SELECT BIN(a), OCT(a),HEX(a) FROM number7;
+--------+--------+--------+
| BIN(a) | OCT(a) | HEX(a) |
+--------+--------+--------+
| 0 | 0 | 0 |
| 10 | 2 | 2 |
| 100 | 4 | 4 |
| 1101 | 15 | D |
+--------+--------+--------+
4 rows in set (0.00 sec)
当然我们也可以在插入时,直接以二进制方式插入值。
mysql> INSERT INTO number7(a) values(B'1101');
Query OK, 1 row affected (0.01 sec)
mysql> SELECT BIN(a) FROM number7;
+--------+
| BIN(a) |
+--------+
| 0 |
| 10 |
| 100 |
| 1101 |
<<: [鼠年全马] W38 - 使用Vuex管理资料状态(上)
>>: JS30 Day 25:Event Capture, Propagation, Bubbling and Once学习笔记
在Hazard寻求解法是否搞错了什麽 tags: IT铁人 Stall 上一次讲到了三种Hazard...
接续上一篇的 annotation processor 实作,我们的 annotation proc...
GCP IAP 今天再来了解一下什麽事IAP?他的全名即是dentity-Aware Proxy简称...
Odoo 的onchange 有些特别要注意的地方, 像是onchange会影响到的栏位都要写入XM...
前言 前一篇 Code Spliting 文章中有提到用 Error boundaries 来处理载...