NUMERIC和DECIMAL類型被Mysql實(shí)現(xiàn)為同樣的類型,這在SQL92標(biāo)準(zhǔn)允許。他們被用于保存值,該值的準(zhǔn)確精度是極其重要的值,例如與金錢有關(guān)的數(shù)據(jù)。當(dāng)聲明一個類是這些類型之一時,精度和規(guī)模的能被(并且通常是)指定;點(diǎn)擊這里有一套最全阿里面試題總結(jié)。
例如: salary DECIMAL(9,2) 在這個例子中,9(precision)代表將被用于存儲值的總的小數(shù)位數(shù),而2(scale)代表將被用于存儲小數(shù)點(diǎn)后的位數(shù)。
因此,在這種情況下,能被存儲在salary列中的值的范圍是從-9999999.99 到 9999999.99。在ANSI/ISO SQL92中,句法DECIMAL(p)等價于DECIMAL(p,0)。
同樣,句法DECIMAL等價于DECIMAL(p,0),這里實(shí)現(xiàn)被允許決定值p。Mysql當(dāng)前不支持DECIMAL/NUMERIC數(shù)據(jù)類型的這些變種形式的任一種。這一般說來不是一個嚴(yán)重的問題,因?yàn)檫@些類型的主要益處得自于明顯地控制精度和規(guī)模的能力。
DECIMAL和 NUMERIC值作為字符串存儲,而不是作為二進(jìn)制浮點(diǎn)數(shù),以便保存那些值的小數(shù)精度。一個字符用于值的每一位、小數(shù)點(diǎn)(如果 scale>0)和“-”符號(對于負(fù)值)。如果 scale 是 0, DECIMAL 和 NUMERIC 值不包含小數(shù)點(diǎn)或小數(shù)部分。
DECIMAL和NUMERIC值得最大的范圍與DOUBLE一樣,但是對于一個給定的DECIMAL 或NUMERIC列,實(shí)際的范圍可由制由給定列的precision或scale限制。當(dāng)這樣的列賦給了小數(shù)點(diǎn)后面的位超過指定scale所允許的位的值,該值根據(jù)scale四舍五入。當(dāng)一個 DECIMAL或NUMERIC列被賦給了其大小超過指定(或缺省的)precision和scale隱含的范圍的值,Mysql存儲表示那個范圍的相應(yīng)的端點(diǎn)值。我希望本文可以幫助你提升技術(shù)水平。那些,感覺學(xué)的好難,甚至?xí)钅憔趩实娜?,別擔(dān)心,我認(rèn)為,如果你愿意試一試本文介紹的幾點(diǎn),會向前邁進(jìn),克服這種感覺。這些要點(diǎn)也許對你不適用
但你會明確一個重要的道理:接受自己覺得受困這個事實(shí)是擺脫這個困境的步。