MySQL數(shù)據(jù)庫中的小數(shù)類型有多種,包括FLOAT、DOUBLE、DECIMAL等。在進(jìn)行字段類型轉(zhuǎn)換時(shí)需要特別注意,否則可能會(huì)導(dǎo)致精度丟失或者溢出。
下面以DECIMAL類型為例,介紹如何正確地進(jìn)行小數(shù)類型轉(zhuǎn)換。
CREATE TABLE test ( id INT unsigned PRIMARY KEY AUTO_INCREMENT, num1 DECIMAL(10,2) NOT NULL, num2 DECIMAL(5,2) NOT NULL );
假設(shè)我們現(xiàn)在要將num2的小數(shù)位數(shù)從2改為3,可以使用ALTER TABLE語句來修改:
ALTER TABLE test MODIFY num2 DECIMAL(6,3);
需要注意的是,DECIMAL類型的第一個(gè)參數(shù)表示總共可以存儲(chǔ)的位數(shù),第二個(gè)參數(shù)表示小數(shù)位數(shù)。如果原來定義的小數(shù)位數(shù)不夠,將其擴(kuò)大并不能恢復(fù)精度,反而可能會(huì)導(dǎo)致精度損失。
比如,如果我們將num2的小數(shù)位數(shù)從2擴(kuò)大到4,將會(huì)導(dǎo)致這個(gè)字段的精度損失:
ALTER TABLE test MODIFY num2 DECIMAL(9,4);
因?yàn)樵瓉淼淖侄味x只允許5位數(shù)字,其中包括3位整數(shù)和2位小數(shù),而新的字段定義允許9位數(shù)字,其中包括5位整數(shù)和4位小數(shù),這樣就導(dǎo)致DECIMAL類型精度損失。
因此,在進(jìn)行小數(shù)類型轉(zhuǎn)換時(shí),一定要注意保留原有的精度。