[精讚] [會員登入]
4086

[Mysql] 資料型態int, float, double, text, char, varchar, blob大小

Mysql中資料型態int, float, text, char, varchar, blob大小

此文完整連結 http://n.sfs.tw/10266

複製連結 [Mysql] 資料型態int, float, double, text, char, varchar, blob大小@新精讚
(文章歡迎轉載,務必尊重版權註明連結來源)
2016-11-26 14:08:44 最後編修
2016-11-21 16:13:54 By 瘦河馬
 

INT 整數型態

  儲存位元 最小值 最大值
TINYINT 1 -128 127
SMALLINT 2 -32768 32767
MEDIUMINT 3 -8,388,608 8,388,607 (838萬)
INT 4 -2147483648 2,147,483,647 (21億)
BIGINT 8 -9,223,372,036,854,775,808 9,223,372,036,854,775,807 (922京)

* 如果輸入值超過範圍會出現 #1264 - Out of range value for column 錯誤

* 如果 update 超過範圍也會出現 #1264 - Out of range value for column 錯誤,不會再出現翻轉的問題

* 修改為無正負號的類型(UNSIGNED TYPE)

   ALTER TABLE `table` CHANGE `col` `col` TINYINT(1) unsigned NOT NULL

FLOAT 浮點型態

  儲存位元 最小值 最大值 有效位數
FLOAT 4 -3.402823466E+38 3.402823466E+38 ~ 7
DOUBLE 8 -1.7976931348623157E+308 1.7976931348623157E+308 ~ 17
DECIMAL* 每9個數字4個位元  ~ -1E+66  ~ 1E+66 1~65

* REAL 是DOUBLE的別名,但如果設定 REAL_AS_FLOAT 的模式中為 FLOAT 的別名。
* DEC、NUMERIC 是 DECIMAL的別名
* DECIMAL 使用方式:
  DECIMAL(M,D) => 總共M個數字和D個小數位數;M的範圍是1~65;D的範圍是0~30;且M>=D。
  DECIMAL(6,4) => 總共6位數字,含小數點4位,數字範圍 99.9999 ~ -99.9999

* DECIMAL會先運算後四捨五入處理多餘的小數,例如 DECIMAL(3,2) 1+0.005 = 1.01

* 設定超過 DECIMAL長度範圍的值,會出現錯誤

  #1425 - Too big scale 48 specified for column 'colname'. Maximum is 30. 小數位數超過30
  #1426 - Too big precision 66 specified for column 'colname'. Maximum is 65. 字元數超65

* 如果 update 超過範圍也會出現 #1264 - Out of range value for column 錯誤,不會再出現翻轉的問題

* 變更為DECIMAL類型

   ALTER TABLE `test` CHANGE `col` `col` DECIMAL(30.20) NOT NULL DEFAULT '0';

* FLOAT、DOUBLE、DECIMAL使用時機:

float 和double型態是使用「近似值」來儲存你的數值,double 比 float 可儲存數值範圍和有效數字較大,儲存空間也大一倍,適合數理計算使用。

decimal 型態就可以用來儲存完全精準的數值,有效數字最多可達65位,最大和最小值比double來得小,適合會計、金融使用。

* 假設我有四個欄位 ABCD,給他們輸入根號2,不同類型的結果:

設定

寫入資料

update `test` set A='1234567890.1234567890123456789012345678901234567890',
B='1234567890.1234567890123456789012345678901234567890',
C='1234567890.1234567890123456789012345678901234567890',
D ='1234567890.1234567890123456789012345678901234567890'

結果

結論

float 最大的問題是有效位數只有7個,其他會亂塞值(磁碟中未清除的位元?),所以只能用在精準度要求不高的地方,避免使用。

double 適合一般般數理運算使用,可以存很大的數字,但有效位數約17個,mysql內建的數學函式也是以此型態作為運算基準

decimal 是精準數值,占用空間比較大,適合算和錢有關的,或是需要存較精準的數字。

TEXT/CHAR/BLOB 文字型態

文字類型 /二進位資料類型 記錄長度位元 最大長度
TINYTEXT /TINYBOLB 1 255
TEXT /BOLB 2 65,535 (65KB)
MEDIUMTEXT /MEDIUMBOLB 3

16,777,215(16MB)

LONGTEXT /LONGBOLB 4 4GB
CHAR /BINARY 1 255
VARCHAR /VARBINARY 2 65,535
255 ( ver.<5.0.3)
5.0.3

* CHAR 固定長度 (0 至 255,預設為 1) 的字串,在儲存長度不足時會自右邊補足空白

* VARCHAR 可變長度 (0-65,535) 的字串,最大的有效長度需視資料列大小限制而定

* CHAR、VARCHAR 和 TEXT的差異:

VARCHAR/CHAR 可以給預設值;TEXT沒辦法給預設值

VARCHAR/CHAR 建索引可不指定索引長度,但TEXT一定要指定長度

CHAR 是固定長度,長度不足會補空白在右邊,VARCHAR、TEXT不會。

* BOLB 型態和TEXT都相同,只是BLOB專門拿來存二進位的資料,例如圖檔。

參考資料

[1] http://stackoverflow.com/questions/4834390/how-to-use-mysql-decimal
[2] http://dev.mysql.com/doc/refman/5.7/en/precision-math-decimal-characteristics.html
[3] http://wubx.net/varchar-vs-text/
[4] http://dev.mysql.com/doc/refman/5.7/en/blob.html

 

你可能感興趣的文章

[Mysql/Mariadb] 建立使用者及資料庫 Mysql/Mariadb建立使用者、刪除使用者、給予權限、建立資料庫

[Mysql] 修改欄位的自動索引值autoindex (auto_increment ) Mysql 新增、刪除、修改、查看欄位的自動索引值autoindex (auto_increment)

兩次使用InnoDB的慘痛經驗 Mysql 的Innodb引擎雖然好用,但是我得說說我兩次的慘痛經驗,這讓我考慮以後可能不會再使用innodb了

[Mysql/MariaDB] 查看資料庫所占空間 查看資料庫在磁碟中所占空間

[mysqldump] Mysqldump時出現記憶體錯誤Out of memory 當進行 mysqldump 時出現 Out of memory (Needed xxxxx bytes) 的錯誤,該如何處理?

[MYSQL] 設定字串欄位的預設值 新增表格的時候,字串欄位給予預設空值;數字欄位給預設數值;日期欄位給空值。

[Mysql] 建立叢集式資料庫4/4--觀察及測試 觀察及測試haproxy+galera建立Mysql的叢集式資料庫,並進行壓力測試

[MySQL/Mariadb] console 將查詢結果輸出到檔案 在mysql 的console中該如何將查詢結果輸出到檔案?

[Mysql/Mariadb] 全文檢索 fulltext index 關於 MySQL 的全文檢索

[Mysql] 將記錄由0變1、1變0;或是判斷後再改值的寫法 MySQL 將記錄由0變1,1變0的SQL寫法 假如欄位 `active` 為0 是失效;1 為有效,他的型態是 tin

我有話要說


限制:留言最高字數1000字,超過部分會被截掉。 限制:未登入訪客,每則留言間隔需超過10分鐘,每日最多5則留言。

訪客留言

[無留言]

隨機好文

PHP for sphinx 函式庫安裝 PECL/sphinx PHP>= 5.2.2 已經能原生支援 sphinx,可是預設的沒有裝,我們得自己裝才能用

海棉寶寶超泡杯演奏的sweet victory 章魚哥和海棉寶寶在超泡杯的演奏歌曲

[Apache] 自訂錯誤頁面及移掉歡迎頁 Apache 有一個歡迎頁,以正式網站來說,出現這頁有點不專業,該移除它..

真正的喜悅 幾種喜悅的類型,雖然很簡單,卻是很多人百思不得其解的難題..

McJob 淺談 在英語世界裡,近期多了一個英文生字 Mcjob,定義為「低薪、無聊且沒有什麼前景的工作」。