MySQL MySQL如何处理超出范围的数值?

MySQL MySQL如何处理超出范围的数值?

在使用 MySQL 数据库时,有时候会遇到某些字段的数值超出了其可接受的范围,此时 MySQL 数据库会怎么处理呢?本文将会介绍。

阅读更多:MySQL 教程

MySQL数据类型

在介绍 MySQL 处理超出范围的数值之前,我们需要了解一下 MySQL 中的数据类型,以下为 MySQL 中常用的数据类型:

  • TINYINT:一个字节,范围为 -128 到 127。
  • SMALLINT:两个字节,范围为 -32768 到 32767。
  • MEDIUMINT:三个字节,范围为 -8388608 到 8388607。
  • INT:四个字节,范围为 -2147483648 到 2147483647。
  • BIGINT:八个字节,范围为 -9223372036854775808 到 9223372036854775807。

除此之外,MySQL还有其他的数据类型,比如FLOAT、DOUBLE、DECIMAL等等,不同的数据类型在存储空间和存储精度方面都有所区别。在 MySQL 中,我们可以通过修改表结构来更改字段的数据类型。

超出范围的数据

当我们向一个超出范围的数据类型存储数据时,MySQL 会根据不同的情况进行不同的处理。以下是不同情况下 MySQL 的处理方式:

整型字段

  • 当向整型字段中存储的数据超出了该字段的可接受范围时,MySQL 会将该值截断为字段的最大或最小值。
  • 如果是无符号整型字段,存储超出范围的数值时,会执行取模运算,将该值模除字段能存储的最大值,将余数存储进去。

具体代码演示:

CREATE TABLE test(
  id INT(11),
  tinyint_signed TINYINT(1),
  tinyint_unsigned TINYINT(1) UNSIGNED
);

INSERT INTO test VALUES (1, 128, 255), (2, -129, -1);

查询结果:

SELECT * FROM test;
id tinyint_signed tinyint_unsigned
1 127 255
2 -128 0

FLOAT字段

在 FLOAT 字段中存储过大或过小的数值时,MySQL 会将这些值存储为特定的常数,可通过以下代码查看:

CREATE TABLE test(
  id INT(11),
  float_type FLOAT(8, 2)
);

INSERT INTO test VALUES (1, 999999999999999999.99), (2, -999999999999999999.99);

SELECT * FROM test;

查询结果:

id float_type
1 0
2 -Infinity

DECIMAL字段

在 DECIMAL 字段中存储数值过大或过小时,MySQL 不会进行向上或向下取整,而是将该数值存储为 NULL,例如:

CREATE TABLE test(
  id INT(11),
  decimal_type DECIMAL(2,1)
);

INSERT INTO test VALUES (1, 10.1), (2, -10.1);

SELECT * FROM test;

查询结果:

id decimal_type
1 NULL
2 NULL

结论

MySQL 的处理超出范围数据的方式主要取决于存储的字段类型,其中整型字段、FLOAT 字段和 DECIMAL 字段分别拥有不同的处理方式。为了避免不必要的问题,建议在设计数据表结构时,充分考虑实际需求,选择相应的数据类型和字段长度。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程