[精讚] [會員登入]
7664

[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] 修改欄位的自動索引值autoindex (auto_increment ) Mysql 新增、刪除、修改、查看欄位的自動索引值autoindex (auto_increment)

[MySQL] FIND_IN_SET函數,把多筆條件判斷弄成字串 SQL 我們如果要查找某個欄位是否為某個值的時候,如果要判斷的條件很多,可以用這個函數

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

[Mysql] 使用索引來加速搜尋 只要是常常用到搜索條件的欄位,就應該把它設成索引鍵,有無設定的速度差可能會好幾倍

[phpmyadmin] 登錄超時 (1440 秒未操作),請重新登錄 phpmyadmin登錄超時 (1440 秒未操作),請重新登錄的問題,該如何解決?

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

[Mysql] 修改資料庫預設校對或編碼 修改資料庫預設校對或編碼的方法

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

[Mysql/MariaDB] 清除及設定 MySQL 的死連接 mysql 伺服器若有太多的連接,無疑的會耗用非常多的資源,若資源耗盡會影響新的連線,勢必要做一些調整

[MYSQL] 查看資料表狀態 要看資料表的狀態,不是結構喔,以前我都會用 procedure analyse(): SELECT `colname`

我有話要說


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

訪客留言

訪客
\"[Mysql] 資料型態int, float, double, text, char, varchar, blob大小\"這篇文裡說到\"float 最大的問題是有效位數只有7個,其他會亂塞值(磁碟中未清除的位元?),所以只能用在精準度要求不高的地方,避免使用。\"不是浮點數有效位數只有7位,有效精度是會隨著數值而漂浮的,有興趣請去看看IEEE754的規範,也不是亂塞數值,那是截位誤差。 留言不能放網址請先註明,讓我又重打一次。 @2018-06-07 20:08:04

新精讚
原來是因為「截位誤差」,我還是第一次聽到這個名詞,感謝您的留言。留言不能有網址讓您重打真是抱歉,我會再來修改設定。
2018-06-07 20:33:43

隨機好文

[jQuery] select 元件的取值及給值 html中的元件select,在jquery中要如何使用?

安裝SPHINX支援中文 新版本的 sphinx 和舊版不同,網路上很多範例和教學是不能用的。此文是安裝和設定方法分享

[札記] 2016.7~12月札記 札記,只是札記

一個邏輯的錯誤刪了全部檔案的經驗 今天本來想做一件很簡單的事,但卻足足浪費我多一倍的時間,再加上刪掉我全部的檔案,原因只是因為我自己的邏輯錯誤。

NETCRAFT發現你的網站及作業系統 NETCRAFT可以發現你的網站及作業系統