我创建了一个 data_type 为DOUBLE的列。
alter table my_table add column my_column double;
当我在information_schema.COLUMNS表中查询此列时,我发现此列的NUMERIC_SCALE是NULL吗?
select DATA_TYPE,
NUMERIC_PRECISION,
NUMERIC_SCALE
from information_schema.columns
where table_schema = 'my_schema'
and table_name = 'my_table'
and column_name = 'my_column'
+-----------+-------------------+---------------+
| DATA_TYPE | NUMERIC_PRECISION | NUMERIC_SCALE |
+-----------+-------------------+---------------+
| double | 22 | NULL |
+-----------+-------------------+---------------+
有人可以解释这种行为吗?
浮点数正是这样——小数分隔符(点)没有固定位置,它可以在任何地方,指定比例(即小数分隔符后的位数)没有意义。
scale 用于
DECIMAL
数据类型,一种具有固定小数点分隔符的类型,对于这种数据类型,scale是有意义的。MySQL 还允许对浮点数使用非标准语法,您可以在其中指定精度和小数位数,例如
DOUBLE(10, 5)
. MySQL 在存储它们时会将浮点值舍入到该规范,并在返回查询结果时适当地格式化它们。文档链接。
dbfiddle 示例。