MySQL 数字类型资料之基本操作

所谓数字类型大致分为以下几种:

http://img2.58codes.com/2024/20126182N9OSk0c0zp.png

每种类型都有不同的範围及其最大最小值。

可以针对不同整数类型插入值,而每个类型都有其範围,超过範围即无法插入。

创建整数类型

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   |

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章