DECIMAL类型支持UNSIGINED ZEROFILL修饰符
功能描述
Vastbase在MySQL兼容模式下,DECIMAL类型支持UNSIGINED ZEROFILL修饰符,使用DECIMAL UNSIGINED ZEROFILL
语法,可以创建一个只能存储非负数值,并且显示时总用零填充到指定长度的列。例如DECIMAL(10,2) UNSIGINED ZEROFILL
将存储最大值为99999999.99的数值,并且在显示时,如果数值不足10位,将在前面填充零(例如00001234.56)。
UNSIGNED和ZEROFILL是两种可以与DECIMAL一起使用的属性,向带有UNSIGINED ZEROFILL修饰符的字段插入新值时,对数值的存储和显示的影响如下:
严格模式:即设置参数vastbase_sql_mode的取值中包含sql_mode_strict,则必须限制插入的列值正负和长度。
非严格模式:即设置参数vastbase_sql_mode的取值中不包含sql_mode_strict,如果遇到超出值域的值会将该值修改为最接近的边界值,不会报错,仅警告提示。
- 插入的负数时被转换为0。
- 插入超出上限的正数时,值会被转换为允许的最大上限值。
关于UNSIGINED和ZEROFILL修饰符详细请参考column定义支持ZEROFILL-UNSIGNED属性。
DECIMAL(M,D)
DECIMAL是一种用于存储精确数值的数据类型,适用于存储具有固定小数点的数值。
- M:表示数值的总位数(包括小数点两边的数值)。
- D:表示小数点后的位数。
例如,
DECIMAL(5,2)
可以存储的最大值为999.99,最小值为-999.99(如果使用负号)。UNSIGNED
当UNSIGNED属性被指定时,它不允许存储负数值。这意味着数值将始终是非负的。
例如,
DECIMAL(5,2) UNSIGNED
可以存储的最大值为999.99,并且不允许负数。ZEROFILL
ZEROFILL属性用于数值类型的列,当使用SHOW或SELECT查询时,它会将数值用零填充到指定的长度。
例如,如果定义了一个
DECIMAL(5,2) ZEROFILL
的列,并且插入了值0.03,那么在查询时它将显示000.03。
注意事项
该特性仅在数据库兼容模式为MySQL时支持(即数据库实例初始化时指定DBCOMPATIBILITY='B')。
示例
1、创建测试表使用DECIMAL UNSIGINED ZEROFILL
选项。
CREATE TABLE my_table_1219694 (
col1 bigint(20) unsigned NOT NULL AUTO_INCREMENT,
col2 decimal(10,2) unsigned zerofill DEFAULT NULL COMMENT '北槽海里数',
col3 numeric(10,5) ZEROFILL DEFAULT '1' COMMENT '指泊位置标志 1:true 0:false'
);
2、插入数据。
INSERT INTO my_table_1219694 (col2, col3) VALUES ('123.45', '0.12345');
INSERT INTO my_table_1219694 (col2, col3) VALUES ('678.90', '1.00000');
3、查询数据。
SELECT * FROM my_table_1219694;
返回结果为:
col1 | col2 | col3
------+-------------+-------------
1 | 00000123.45 | 00000.12345
2 | 00000678.90 | 00001.00000
(2 rows)
4、查询表结构。
\d+ my_table_1219694;
返回结果为:
Table "public.my_table_1219694"
Column | Type | Modifiers | Storage | Stats target | Description | Attalias
--------+---------------------------------+-------------------------+---------+--------------+-----------------------------+----------
col1 | uint8 | not null AUTO_INCREMENT | plain | | | col1
col2 | numeric(10,2) unsigned zerofill | default NULL::numeric | main | | 北槽海里数 | col2
col3 | numeric(10,5) unsigned zerofill | default 1::numeric | main | | 指泊位置标志 1:true 0:false | col3
Has OIDs: no
Options: orientation=row, compression=no, fillfactor=80
5、清理测试表。
DROP TABLE my_table_1219694;