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