[精讚] [會員登入]
4052

[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 的死連接 mysql 伺服器若有太多的連接,無疑的會耗用非常多的資源,若資源耗盡會影響新的連線,勢必要做一些調整

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

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

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

[Mysql/Mariadb] GROUP_CONCAT 函數 MySQL 中和 group by 一起用的函式,如果我們要算數值的總和或平均,可以使用 sum() 或 avg() 。但是我們如果要在 group by 中把字串「黏起來」,不是使用 concat(

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

[MySQL/Mariadb] 正規表達式(regular express) mysql的正規表達式很詭異,很不能接受

[Mysql/MariaDB] 表格的引擎 (engine):查看及修改 MySQL表格引擎預設為 MyISAM,但在4.0以上的mysql 其實支援不只一種引擎,各有優缺點,這篇介紹引擎的操作。

[Mysql] 建立叢集式資料庫1/4 -- 安裝及設定DB1 使用galera建立Mysql的叢集式資料庫 (GALERA CLUSTER FOR MYSQL THE TRUE MULTI-MASTER)

[MySQL] console mode 的亂碼處理 使用MySQL的console mode如果出現亂碼 在,要怎麼處理?

我有話要說


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

訪客留言

[無留言]

隨機好文

使用Google尋找你的手機 這近發現google竟然可以用來找android的手機,而且不需要經過什麼設定或安裝軟體。

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

[AS3] 我做的唯一一個Flash As3遊戲UFO INVADSION [AS3] 我做的唯一一個Flash As3遊戲,是第一個也是最後一個,後來就沒再寫as3,不過as3還滿好玩的。

[Wildfly10] 發佈war檔 deploy war file onto wildfly10

「許功蓋」的字以及源由 有玩過電腦一段時間的人,都聽過這個人(有一天我才發現7年級的竟然都不認識這個"人")。 在古老的年代