mysql @符号_MySQL 数值类型
點(diǎn)擊關(guān)注,我們共同每天進(jìn)步一點(diǎn)點(diǎn)!
1 整數(shù)類(lèi)型
整數(shù)類(lèi)型包含TINYINT、SMALLINT、MEDIUMINT、INT BIGINT等
1 存取范圍
m為其顯示寬度,在為字段設(shè)置 zerofill約束條件時(shí)有效,否則將不會(huì)填充滿整個(gè)顯示寬度。
2 可選約束
unsigned:使用無(wú)符號(hào)存儲(chǔ)
zerofill:顯示寬度不夠時(shí)使用0進(jìn)行填充
3 顯示寬度
使用一切數(shù)值類(lèi)型時(shí),指定其寬度均是為其指定顯示寬度,并非存入的限制寬度。
以下示例將演示為INT類(lèi)型設(shè)置設(shè)置了顯示寬度后,當(dāng)寬度不夠時(shí)將以指定字符進(jìn)行填充。
mysql>?create?table?temp?(num?int(5)?unsigned?zerofill);??#?創(chuàng)建temp表,顯示寬度為5,有num字段,無(wú)符號(hào)整型,使用0進(jìn)行寬度填充Query?OK,?0?rows?affected?(0.03?sec)
mysql>?insert?into?temp?(num)?values
????->?????????(1),
????->?????????(9999999);
Query?OK,?2?rows?affected?(0.00?sec)
Records:?2??Duplicates:?0??Warnings:?0
mysql>?select?*?from?temp;
+---------+
|?num?????|
+---------+
|???00001?|??#?當(dāng)顯示寬度不夠時(shí)使用0進(jìn)行填充
|?9999999?|??#?由于指定的寬度是顯示寬度,故該數(shù)值也能存入,這與存儲(chǔ)寬度無(wú)關(guān)
+---------+
2?rows?in?set?(0.00?sec)
4 范圍超出
當(dāng)范圍超出默認(rèn)值時(shí),將會(huì)按照最大值或最小值進(jìn)行存入。
以下示例將演示TINYINT類(lèi)型無(wú)符號(hào)存入-1與256后將會(huì)按照0與255進(jìn)行存儲(chǔ)。
MySQL5.7.30版本中這樣的操作將會(huì)拋出異常
但是在MySQL5.6.X版本中這樣的操作是被允許的(非嚴(yán)格模式下)
mysql>?insert?into?temp(num)?values
????->?(-129),
????->?(128);
mysql>?select?*?from?temp;
+------+
|?temp?|
+------+
|?-128?|?#-129存成了-128
|??127?|?#128存成了127
+------+
2 浮點(diǎn)類(lèi)型
浮點(diǎn)類(lèi)型包括FLOAT、DOUBLE、DECIMAL
1 存取范圍
m為其整數(shù)部分顯示個(gè)數(shù),n為其小數(shù)部分顯示個(gè)數(shù)。
DECIMAL底層由字符串進(jìn)行存儲(chǔ),故精度不會(huì)出現(xiàn)偏差,也被稱(chēng)為定點(diǎn)類(lèi)型。
2 精度問(wèn)題
根據(jù)不同的需求,應(yīng)當(dāng)使用不同的浮點(diǎn)類(lèi)型進(jìn)行存儲(chǔ),一般來(lái)說(shuō)使用FLOAT足以,但是對(duì)于一些精度非常高的數(shù)據(jù)則應(yīng)該使用DECIMAL類(lèi)型進(jìn)行存儲(chǔ)。
以下示例將演示使用不同的浮點(diǎn)類(lèi)型進(jìn)行值存儲(chǔ)時(shí)會(huì)發(fā)生精度問(wèn)題。
mysql>?create?table?t1(num?float(255,30));??#?指定顯示寬度Query?OK,?0?rows?affected?(0.05?sec)
mysql>?create?table?t2(num?double(255,30));?#?指定顯示寬度
Query?OK,?0?rows?affected?(0.03?sec)
mysql>?create?table?t3(num?decimal(65,30));?#?指定顯示寬度
Query?OK,?0?rows?affected?(0.03?sec)
mysql>?insert?into?t1(num)?values(1.11111111111111111);
Query?OK,?1?row?affected?(0.00?sec)
mysql>?insert?into?t2(num)?values(1.11111111111111111);
Query?OK,?1?row?affected?(0.02?sec)
mysql>?insert?into?t3(num)?values(1.11111111111111111);
Query?OK,?1?row?affected?(0.00?sec)
mysql>?select?*?from?t1;??#?點(diǎn)后7位以內(nèi)
+----------------------------------+
|?num??????????????????????????????|
+----------------------------------+
|?1.111111164093017600000000000000?|
+----------------------------------+
1?row?in?set?(0.00?sec)
mysql>?select?*?from?t2;??#?點(diǎn)后15位以內(nèi)
+----------------------------------+
|?num??????????????????????????????|
+----------------------------------+
|?1.111111111111111200000000000000?|
+----------------------------------+
1?row?in?set?(0.00?sec)
mysql>?select?*?from?t3;??#?絕對(duì)精確
+----------------------------------+
|?num??????????????????????????????|
+----------------------------------+
|?1.111111111111111110000000000000?|
+----------------------------------+
1?row?in?set?(0.00?sec)
3 位類(lèi)型
BIT(M)可以用來(lái)存放多位二進(jìn)制數(shù),M范圍從1~64,如果不寫(xiě)默認(rèn)為1位。
注意:對(duì)于位字段需要使用函數(shù)讀取
bin()顯示為二進(jìn)制
hex()顯示為十六進(jìn)制
mysql>?create?table?temp(num?bit);??#?創(chuàng)建temp表,num字段為bit類(lèi)型Query?OK,?0?rows?affected?(0.03?sec)
mysql>?desc?temp;?#?默認(rèn)顯示寬度為1
+-------+--------+------+-----+---------+-------+
|?Field?|?Type???|?Null?|?Key?|?Default?|?Extra?|
+-------+--------+------+-----+---------+-------+
|?num???|?bit(1)?|?YES??|?????|?NULL????|???????|
+-------+--------+------+-----+---------+-------+
1?row?in?set?(0.00?sec)
mysql>?insert?into?temp(num)?values(1);??#?插入記錄,1
Query?OK,?1?row?affected?(0.00?sec)
mysql>?select?*?from?temp;??#?直接查看是查看不到的
+------+
|?num??|
+------+
|?????|
+------+
1?row?in?set?(0.00?sec)
mysql>?select?bin(num),hex(num)?from?temp;??#?需要轉(zhuǎn)換為二進(jìn)制或十六進(jìn)制進(jìn)行查看
+----------+----------+
|?bin(num)?|?hex(num)?|
+----------+----------+
|?1????????|?1????????|
+----------+----------+
1?row?in?set?(0.00?sec)
mysql>?alter?table?temp?modify?num?bit(5);??#?修改num字段的顯示寬度為5
Query?OK,?1?row?affected?(0.06?sec)
Records:?1??Duplicates:?0??Warnings:?0
mysql>?insert?into?temp?values(8);??#?插入記錄,8
Query?OK,?1?row?affected?(0.02?sec)
mysql>?select?bin(num),hex(num)?from?temp;?#?顯示的是不同的進(jìn)制
+----------+----------+
|?bin(num)?|?hex(num)?|
+----------+----------+
|?1????????|?1????????|
|?1000?????|?8????????|
+----------+----------+
2?rows?in?set?(0.00?sec)
原文地址:https://www.cnblogs.com/Yunya-Cnblogs/p/13585109.html
喜歡請(qǐng)關(guān)注,有用請(qǐng)轉(zhuǎn)發(fā)~
升職、加薪、無(wú)漏測(cè)-點(diǎn)“在看”
總結(jié)
以上是生活随笔為你收集整理的mysql @符号_MySQL 数值类型的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: diff命令输出格式解读
- 下一篇: Arrays类的排序(sort、para