下面以DECIMAL类型为例,介绍如何正确地进行小数类型转换。
CREATE TABLE test ( id INT unsigned PRIMARY KEY AUTO_INCREMENT, num1 DECIMAL(10,2) NOT NULL, num2 DECIMAL(5,2) NOT NULL );
假设大家现在要将num2的小数位数从2改为3,可以使用ALTER TABLE语句来修改:
ALTER TABLE test MODIFY num2 DECIMAL(6,3);
需要注意的是,DECIMAL类型的第一个参数表示总共可以存储的位数,第二个参数表示小数位数。如果原来定义的小数位数不够,将其扩大并不能恢复精度,反而可能会导致精度损失。
比如,如果大家将num2的小数位数从2扩大到4,将会导致这个字段的精度损失:
ALTER TABLE test MODIFY num2 DECIMAL(9,4);
因为原来的字段定义只允许5位数字,其中包括3位整数和2位小数,而新的字段定义允许9位数字,其中包括5位整数和4位小数,这样就导致DECIMAL类型精度损失。
因此,在进行小数类型转换时,一定要注意保留原有的精度。