decimal是什么类型_SQLMysql数据类型
一 前言
每個數據庫的數據類型從來都不是一個簡單的數據結構,特別是使用不同的數據庫,不同的引擎,其支持的數據類型也不一樣,選擇那種數據類型作為字段類型對數據庫的性能也是天差地別,故對數據類型有個全面的認知,在數據庫表設計的時候選擇合適的數據類型就尤其重要;本篇是基于mysql的InnoDB的數據類型知識,要學就學主流知識;
學習本篇的基礎是知識追尋者發過的SQL系列文章(公眾號讀者直接在專欄里面找即可)
《SQL-你真的了解什么SQL么?》
《SQL-小白最佳入門sql查詢一》
《SQL-小白最佳入門sql查詢二》
《SQL- 多年開發人員都不懂的插入與更新刪除操作注意點》
《SQL-SQL事物操作》
公眾號:知識追尋者
?知識追尋者(Inheriting the spirit of open source, Spreading technology knowledge;)
”二 基礎數據類型
2.1 字符串類型
- char(n) ?類型 , 定長字符串,即儲存的每個值占用的空間都一樣;適用于儲存長度都一樣的字段,比如 電話號碼,身份證號,密碼等;mysql 在 儲存char類型字段時,會自動刪除末尾保留的空格;如果是SQL SERVER 其后面就會保留空白字符;其最多儲存 0 - 255 個字符,即8位;
- varchar(n) 類型, 變長字符串, 比如varchar(n)表示可以儲存n個字節;當字符串長度小于等于255個字節時,其會使用 n 個字節儲存數據,額外一個字節記錄n值,比如varchar(200), 其實際為 varchar(201);如果字符串長度大于255個字節,其會用2個字節記錄n值,比如 varchar(500) , 其實際為varchar(502);其最多儲存 0-65535 字節,即64位;由于其是可變長度,故在更新的時候,性能開銷比較大;
- TEXT 長文本類型,存儲大數據,其有一定的字符集和排序規則,故如果設置位text類型,性能會降低很多,占用的磁盤空間較大;其長度為0-65535 字節;其衍生的數據類型還有TINYTEXT (0-255字節), MEDIUMTEXT (0-16 777 215 字節),LONGTEXT 0-4 294 967 295字節);
- blog類型 , 儲存沒有規則的二進制字符串,其存儲 (0-65 535) 個字節;其衍生的類型有 TINYBLOB ?(0-255字節), MEDIUMBLOB(0-16 777 215 字節), LONGBLOB(0-4 294 967 295字節);
實際開發中 一般會選擇 char , varchar 類型進行儲存數據,text少用,blog慎用,坑比較大;并且指定不同的數據類型長度也直接影響到數據庫的性能,每次跟磁盤進行一次I/O的能力也不一樣;
2.2 整型
- tinyint ? ? 1字節 ? 8 位
- smallint ? ?2字節 ? 16位
- mediumint ? 3字節 ? ?24 位
- int ? ? ? ? 4字節 32位
- bigint ? ? ?8字節 64 位
其儲存大小為 -2^(N-1)至 2^(N-1)-1 ,其中 N 為位數, 如果是無符號整型,則從0開似乎,沒有負數,但其實際儲存情況和有符號整型性能差不多,在實際開發中應該根據不同的業務需求,選擇合適的類型;
常用tinyint(1)表示布爾型,1 為真,0為假;
2.3 浮點型
- float(單精度) ? ? 4字節
- double(雙精度) ? ?8字節
- decimal, 其能指定儲存精度,decimal(M,D) , 其中M代表總位數,D代表小數位,M-D 代表整數位;比如金錢相關的計算就推薦使用decimal , 否則造成精度丟失問題,去面試的時候如果問道使用浮點型就回家等通知吧!
2.4 日期時間類型
- date , 日期 通常就是 YYYY-MM-DD 格式, 當然也可以格式化為其它格式,所有的格式化形式都不在本篇討論范圍內;
- time, 時間 格式 hh:mm:ss ;
- year 年份 YYYY;不建議使用YY
- datetime , 日期時間格式 , 其日期范圍 為 1001 至 9999 年,精度為秒;占用8位;
- timestamp, 挺多人稱其為時間戳,其實其是與Unix時間戳相同而已,從 1970 1 月 1日 午夜來表示秒數,最多儲存至2038 年。其依賴于時區,占用4位;
在日常開發中推薦使用 timestamp 進行儲存時間,性能相比于datetime 較好;它們的標準格式都為 YY-MM-DD hh:mm:ss;
2.5 枚舉與SET類型
- enum(val1, val2, val3...), 用于儲存固定值,比如性別男女, 四級 春夏秋冬;其內部使用整型排序,顯示時使用字符串,故在排序的時候可能會發生一些奇怪的現象,可以用field進行指定排序; 儲存大小為16位;
示例
create?table?test_enum?(?`gender`?enum('男',?'女')?);INSERT?INTO?`zszxz`.`test_enum`(`gender`)?VALUES?('男');
- set(val1, val2, val3...), 集合, 類似于數組,相比于枚舉只能存儲單個值,其能儲存多個值;儲存大小為64位;
示例
create?table?test_set?(?`gender`?set('男',?'女')?);INSERT?INTO?`zszxz`.`test_set`(`gender`)?VALUES?('男,女');
2.6 其它
其它數據類型比如 ,bit , 儲存位, 坑也很大;不建議使用;在眾多數據類型中優先選擇整型,其性能相比于字符串的排序規則等會快很多;字段的修飾符 通常有 NULL , NOT NULL , CONMENT 等, 如果是非空字段盡量默認為NOT NULL , 其能帶來一定性能提升,并且在使用索引的時候相對簡單;盡量不要使用外鍵,每次外鍵都會帶來額外的性能開銷;
總結
以上是生活随笔為你收集整理的decimal是什么类型_SQLMysql数据类型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matlab length_MATLAB
- 下一篇: python ui自动化测试框架_Pyt