MySQL字符類型

列類型

  • 整型(默認是有符號的)
類型 字節(jié)數(shù) 有符號型范圍 無符號型范圍(unsigned)
tinyint(M) 1字節(jié) -128~127 0~255
smallint(M) 2字節(jié) -32768~32767 0~65535
mediumint(M) 3字節(jié) -8388608~8688607 16777215
int(M) 4字節(jié) -2147483648~2147483647 4294967295
integer 4字節(jié)
bigint(M) 8字節(jié) -9223372036854775808~9223372036854775807
float(X) 浮點型 4 -3.4E38~3.4E38(7個有效位) 如果 X < = 24 或 8 如果 25 < = X < = 53
float 4 個字節(jié)
double 雙精度實型 8 個字節(jié) -1.7E308~1.7E308(15個有效位)
double precision 8 個字節(jié)
real 8 個字節(jié)
decimal(M,D)數(shù)字型 M字節(jié)(D+2 , 如果M < D) 128bit鄙漏,不存在精度損失,常用于銀行帳目計算(28個有效位)
numeric(M,D) M字節(jié)(D+2 , 如果M < D)

日期和時間類型

類型 字節(jié)數(shù)
DATE 3 個字節(jié)
DATETIME 8 個字節(jié)
TIMESTAMP 4 個字節(jié)
TIME 3 個字節(jié)
YEAR 1 字節(jié)

字符串類型

類型 字節(jié)數(shù)和范圍
CHAR(M) M字節(jié)唯绍,1 <= M <= 255
VARCHAR(M) L+1 字節(jié), 在此L <= M和1 <= M <= 255
TINYBLOB, TINYTEXT L+1 字節(jié), 在此L< 2 ^ 8
BLOB, TEXT L+2 字節(jié), 在此L< 2 ^ 16
MEDIUMBLOB, MEDIUMTEXT L+3 字節(jié), 在此L< 2 ^ 24
LONGBLOB, LONGTEXT L+4 字節(jié), 在此L< 2 ^ 32
ENUM(‘value1’,’value2’,…) 1 或 2 個字節(jié), 取決于枚舉值的數(shù)目(最大值65535)
SET(‘value1’,’value2’,…) 1,2馋辈,3覆获,4或8個字節(jié), 取決于集合成員的數(shù)量(最多64個成員)

1 整型
如何驗證存儲的數(shù)據(jù)范圍 ? 編程計算機 或者 python代碼
?符號與有符號為什么?大?小不同? 因為需要用?個bit存儲符號
默認是有符號好使?符號呢?
來?個測試,創(chuàng)建表 添加tinyint類型字段 插?255 發(fā)現(xiàn)最大還是127 說明
默認是有符號的 如何設置有符號?
創(chuàng)建表是在數(shù)據(jù)類型后?添加unsigned 選擇哪個來使用呢?
常規(guī)int就?夠使?了
全?bigint也行 只不過會多占一些空間,但是硬盤好像也不值錢 ?而且對你的程序運行速度沒啥影響
最好是根據(jù)你的實際情況 ?如存年齡tinyint就最夠
思考: 可以給整型加上寬度限制嗎? 可以,嘗試一下,在建表時 為int指定寬度為更大的范圍
插?超過int范圍的數(shù)據(jù)
查看結果 發(fā)現(xiàn)任然只能存儲4字節(jié)最大值
也就是說: 整型的數(shù)據(jù)能保存的數(shù)據(jù)范圍由數(shù)據(jù)類來決定
那么寬度對于整型?言有什么意義嗎?
對于整型?言 寬度用于控制顯示的長度
例如 int(10) 則表示顯示的時候 如果不足10位則不足10位
嘗試一下 發(fā)現(xiàn)沒什么? 因為你僅僅告訴她需要填充10位 并沒有說?什么 填充
所以 要控制顯示寬度 不僅需要指定寬度還要指定 zerofill 以0填充 有沒有發(fā)現(xiàn)?個問題 我們之前創(chuàng)建的表并沒有指定顯示寬度 那他有沒有呢?
desc查看一下
有?且剛好就是 能夠存儲的最大范圍的長度 所以如果你使用的是整型 則
沒有必要指定顯示寬度

2浮點
float(m,d) 4字節(jié)
double(m,d) 8字節(jié)
decimal(m,d) 根據(jù)長度確定
在浮點類型中 后面的m表示整體?度 d表示小數(shù)長度 注意:是長度和字節(jié)數(shù)?關 那么整數(shù)部分的長度就是m-d
例例如 float(5,3) 最?能存出 99,999
三種類型的區(qū)別
相同處: ?數(shù)部分最大精度都是30 不同處:
1.float double 總長度最大為255
2.float double 都是不清準的小數(shù) decimal是精準的 3.double的精度?float?一些
如何取舍根據(jù)實際情況 如果對精度要求? 比如銀行系統(tǒng) 就是用decimal 否則一般使用float
3char和varchar
寬度?于限制字符的長度(字符數(shù)) char 為定?
超出范圍則報錯 不足則用空格在右邊補?長度 varchar為變?
超出范圍則報錯 不足則有幾個字符就存幾個
測試:
create table t10(a char(4),b varchar(4)); insert into t10 values("a","a");
select *from t10;
decimal為65

發(fā)現(xiàn)并沒有區(qū)別!
介紹一個函數(shù) lenght(列名) 可以查詢某?列的長度 select char_length(a),char_length(b) from t10; 發(fā)現(xiàn)?度也相同!
這是為什么?
因為mysql?動把后面的空格給干掉了了! 那怎么能看一下呢?
需要修改sql_mode 增加 PAD_CHAR_TO_FULL_LENGTH set global sql_mode =
"PAD_CHAR_TO_FULL_LENGTH,STRICT_TRANS_TABLES" 再次查看:select char_length(a),char_length(b) from t10; 由此可以看出定長的char mysql的確?動將后?面的空格處理掉了
再來看一個例子:
create table t5(name char(4)); insert into t5 value("yh") insert into t5 value("egon")
select *from t5 where name = "yh "
無論后面有多少個空格都會?動去掉
換?種寫法:
select *from t5 where name =like "yh " 此時就不行了 自動去除空格僅在第一種寫法中生效
總結:使?用char類型時 如果數(shù)據(jù)長度不足則會?動補? 在讀取數(shù)據(jù)時 mysql會自動去除其中的空格
因為這是mysql內(nèi)部的一個存儲機制 與我們的應?程序邏輯?關
注意的是 如果數(shù)據(jù)不足規(guī)定長度 使用like 來模糊匹配時 硬盤上存儲 的空格也算作有效字符
所以我們應該在后面加上% 表示后面任意長度的字符都匹配 像這樣 :select *from t5 where name =like "yh%" 當然你也可以使用_ 表示一個任意字符 模糊匹配后續(xù)會詳細講

如何抉擇?
你覺得那種類型好呢? 到底哪種好我們得分析一下 相同點:都是字符類型 不同點:
1.char 是固定長度 會浪費空間 存取速度快
2.varchar 是可變長度 節(jié)省空間
存取速度慢 思考 可變長度如何實現(xiàn)?
假設我們有兩個類型 char(4)
存儲: axx bx bbbbcccc varcahr(4)
存儲:axxbxbbbbcccc
如何取出某個名字?
需要在前面保存字符串的長度 (1btyes+axx)(1bytes+bx)(1bytes+bbbb)(1bytes+cccc) 長度最?為兩個字節(jié)2bytes
這就意味著 一些情況下 varchar更占用空間 并且需要計算字符串長度 所以存取速度慢

TIMESTAMP 自帶默認狀態(tài)墩新,默認時間就是當前時間

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末贸弥,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子海渊,更是在濱河造成了極大的恐慌绵疲,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,430評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件臣疑,死亡現(xiàn)場離奇詭異最岗,居然都是意外死亡,警方通過查閱死者的電腦和手機朝捆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評論 3 398
  • 文/潘曉璐 我一進店門般渡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人芙盘,你說我怎么就攤上這事驯用。” “怎么了儒老?”我有些...
    開封第一講書人閱讀 167,834評論 0 360
  • 文/不壞的土叔 我叫張陵蝴乔,是天一觀的道長。 經(jīng)常有香客問我驮樊,道長薇正,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,543評論 1 296
  • 正文 為了忘掉前任囚衔,我火速辦了婚禮挖腰,結果婚禮上,老公的妹妹穿的比我還像新娘练湿。我一直安慰自己猴仑,他們只是感情好,可當我...
    茶點故事閱讀 68,547評論 6 397
  • 文/花漫 我一把揭開白布肥哎。 她就那樣靜靜地躺著辽俗,像睡著了一般。 火紅的嫁衣襯著肌膚如雪篡诽。 梳的紋絲不亂的頭發(fā)上崖飘,一...
    開封第一講書人閱讀 52,196評論 1 308
  • 那天,我揣著相機與錄音杈女,去河邊找鬼朱浴。 笑死吊圾,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的赊琳。 我是一名探鬼主播,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼砰碴,長吁一口氣:“原來是場噩夢啊……” “哼躏筏!你這毒婦竟也來了?” 一聲冷哼從身側響起呈枉,我...
    開封第一講書人閱讀 39,671評論 0 276
  • 序言:老撾萬榮一對情侶失蹤趁尼,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后猖辫,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體酥泞,經(jīng)...
    沈念sama閱讀 46,221評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,303評論 3 340
  • 正文 我和宋清朗相戀三年啃憎,在試婚紗的時候發(fā)現(xiàn)自己被綠了芝囤。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,444評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡辛萍,死狀恐怖悯姊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情贩毕,我是刑警寧澤悯许,帶...
    沈念sama閱讀 36,134評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站辉阶,受9級特大地震影響先壕,放射性物質發(fā)生泄漏。R本人自食惡果不足惜谆甜,卻給世界環(huán)境...
    茶點故事閱讀 41,810評論 3 333
  • 文/蒙蒙 一垃僚、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧规辱,春花似錦冈在、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至炫贤,卻和暖如春溅固,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背兰珍。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評論 1 272
  • 我被黑心中介騙來泰國打工侍郭, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 48,837評論 3 376
  • 正文 我出身青樓亮元,卻偏偏與公主長得像猛计,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子爆捞,可洞房花燭夜當晚...
    茶點故事閱讀 45,455評論 2 359

推薦閱讀更多精彩內(nèi)容

  • MYSQL 基礎知識 1 MySQL數(shù)據(jù)庫概要 2 簡單MySQL環(huán)境 3 數(shù)據(jù)的存儲和獲取 4 MySQL基本操...
    Kingtester閱讀 7,820評論 5 116
  • 字段類型數(shù)值MySQL 的數(shù)值數(shù)據(jù)類型可以大致劃分為兩個類別奉瘤,一個是整數(shù),另一個是浮點數(shù)或小數(shù)煮甥。許多不同的子類型對...
    小慕先森閱讀 943評論 0 1
  • 最近又一次陷進蘇打綠的坑出不來盗温,第一次聽是高中,上學的時候成肘,不知道是不是全國的老師串通好的卖局,按什么成績名次排座位。...
    蘇木辛閱讀 576評論 0 1
  • 詩 酒 女人 故事和酒 2017.05.03
    陳列文閱讀 134評論 1 1
  • 當了媽媽后双霍,感覺get到了很多正能量砚偶,比如寬容心,耐心洒闸,愛心還有常懷感恩之心蟹演。也并沒有像朋友們說的那樣有了寶寶后生...
    灰色的破旗閱讀 531評論 0 2