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