mysql-05mysql支持的數據類型

一丶整型

  • 分類:TINYINT SMALLINT MEDIUMINT INT BIGINThtml

  • 做用:存儲年齡,等級,id,各類號碼等mysql

tinyint 1字節(-128)sql

int 4字節(通常來說不用設置,由於基本夠用)數據庫

bigint 8字節安全

類型存儲範圍:參考圖片<http://www.cnblogs.com/linhaifeng/articles/7233411.htmlsession

類型後面的寬度不能改變字段存儲的大小限制!!!!!測試

強調:對於整型來講,數據類型後的寬度並非存儲限制,而是顯示限制,因此在建立表時,若是字段採用的是整型類型,徹底無需指定顯示寬度, 默認的顯示寬度,足夠顯示完整當初存放的數據code

嚴格模式補充
咱們剛剛在上面設置了char,tinyint,存儲數據時超過它們的最大存儲長度,發現數據也能正常存儲進去,只是mysql幫咱們自動截取了最大長度。但在實際狀況下,咱們應該儘可能減小數據庫的操做,緩解數據庫的壓力,讓它僅僅只管理數據便可,這樣的狀況下就須要設置安全模式htm

show variables like "%mode%";  # 查看數據庫配置中變量名包含mode的配置參數
# 修改安全模式
set session # 只在當前操做界面有效
set global  # 全局有效

set global sql_mode ='STRICT_TRANS_TABLES'
# 修改完以後退出當前客戶端從新登錄便可

二丶浮點型

  • 分類:FLOAT DOUBLE decimal
  • 應用場景:身高,體重,薪資

字段限制特色(5,3)前一位表示全部的位數,後一位表示小數個數blog

用法列子

# 存儲限制
float(255,30)
double(255,30)
decimal(255,30)

# 精確度驗證
create table t9(x float(255,30));
create table t10(x double(255,30));
create table t11(x decimal(65,30));

insert into t9 values(1.111111111111111111111111111111);
insert into t10 values(1.111111111111111111111111111111);
insert into t11 values(1.111111111111111111111111111111);

最終結果相對數字t9, t10會郵精度缺失, 由此說明decimal的精度會高於double和float,而double的精度會高於float!!!

三丶字符類型(char與varchar)

字符串類型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。該節描述了這些類型如何工做以及如何在查詢中使用這些類型。

  • 分類
    • char(定長)默認爲1字節
    • varchar(變長)默認爲1字節
  • 做用:姓名,地址,描述類信息
create table t10(name char(4))  # 超出四個字符報錯,不夠四個字符空格補全
create table t11(name varchar(4))  # 超出四個字符報錯,不夠四個有幾個就存幾個

# 驗證存儲限制
insert into t12 values('hello');
insert into t13 values('hello');
# 驗證存儲長度
insert into t12 values('a'); #'a    '
insert into t13 values('a'); #'a'
select * from t12
select * from t13  # 沒法查看真正的結果

select char_length(name) from t12
select char_length(name) from t13  # 仍然沒法查看到真正的結果

"""首先應該確定的是在硬盤上存的絕對是真正的數據,但顯示的時候mysql會自動將末尾的空格取掉"""
# 若是不想讓mysql幫你作自動去除末尾空格的操做,須要再添加一個模式
set global sql_mode="strict_trans_tables,PAD_CHAR_TO_FULL_LENGTH";
# 退出客戶端從新登錄
select char_length(x) from t12; #4
select char_length(y) from t13; #1

# 針對char類型,mysql在存儲時會將數據用空格補全存放到硬盤中。可是會在讀出結果的時候自動取掉末尾的空格


"""
char與varchar的使用區別
"""
name char(5)
# 缺點:浪費空間
# 優勢:存取速度都快
egon alex lxx  jxx  txx  

name varchar(5)
# 缺點:存取速度慢
# 優勢:節省空間
1bytes+egon 1bytes+alex 1bytes+lxx  1bytes+jxx  1bytes+txx

四丶日期類型

  • 分類

    • date:2019-05-01
    • time:11:11:11
    • Datetime: 2019-01-02 11:11:11
    • Year:2019
  • 測試

    create table student(
      id int,
      name char(16),
      born_year year,
      birth date,
      study_time time,
      reg_time datetime
    );
    insert into student values(1,'egon','2019','2019-05-09','11:11:00','2019-11-11 11:11:11');

五丶枚舉與集合

  • 分類

    • 枚舉enum 多選一
    • 集合set 多選多
  • 測試

    create table user(
      id int,
      name char(16),
      gender enum('male','female','others')
    );
    insert into user values(1,'jason','xxx');  # 報錯
    insert into user values(2,'egon','female');  # 正確!
    
    
    create table teacher(
      id int,
      name char(16),
      gender enum('male','female','others'),
      hobby set('read','sleep','sanna','dbj')
    );
    insert into teacher values(1,'egon','male','read,sleep,dbj');  # 集合也能夠只存一個
相關文章
相關標籤/搜索