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