一:MySQL資料型別之整型
1.整型
tinyint 1bytes
smallint 2bytes
int 4bytes
bigint 8bytes
不同型別的int能夠儲存的數字範圍不一樣
2.驗證不同型別的int是否會空出一個儲存正負號
create table t6(id tinyint);
insert into t6 values(256),(-129);
得出結論:tinyint預設就會空出一位儲存正負號
"""其實所有的int型別預設都是空出一位儲存正負號"""
3.增加約束條件 去除正負號(unsigned)
create table t7(id tinyint unsigned);
insert into t7 values(256),(-129);
結論:正負號可以通過約束條件去除掉
二:浮點型
1.浮點型
float(255,30)
總共255位小數位佔30位
double(255,30)
總共255位小數位佔30位
decimal(65,30)
總共65位小數佔30位
2.驗證浮點型精確度
create table t8(id float(255,30));
create table t9(id double(255,30));
create table t10(id decimal(65,30));
insert into t8 values(1.1111111111111111111111111111);
insert into t9 values(1.1111111111111111111111111111);
insert into t10 values(1.1111111111111111111111111111);
1.三者精確度不同
精確度最高 : decimal
2.精確度排序
decimal > double > float
具體使用結合實際情況
三:字元型別
1.字元型別
char(4) 定長
最多儲存四個字元 超出了則報錯 沒超出則用空格填充
varchar(4) 變長
最多儲存四個字元 超出了則報錯 沒超出有幾個存幾個
2.驗證字元型別是否限制
create table t11(id int,name char(4));
create table t12(id int,name varchar(4));
insert into t11 values(1,'jason');
insert into t12 values(1,'jason');
3.失真原因
出現失真的情況,是因為MySQL配置檔案內缺少了SQL_MODE內嚴格模式程式碼
簡稱:
sql_mode : 嚴格模式(如果一個資料不符合資料規範就拒絕儲存)本身系統預設自帶
4.SQL_MODE(命令修改)
4.1.模糊查詢(過濾)
show variables like '%mode%';
4.2修改修改
set session : 只在當前操作介面有效
set global : 全域性有效
4.3直接修改配置檔案
set global sql_mode = 'strict_trans_tables';
4.4修改完成後 重新啟動後才生效
exit
mysql -uroot -p
4.5再次查詢即成功了
show variables like '%mode%';
四:研究數字在數字型別與字元型別中的區別
1.驗證數字在數字型別中是否是用來限制儲存長度
create table t13(id int(3));
insert into t13 values(111111);
'''數字在數字型別中並不是用來限制儲存長度 而是用來控制展示長度'''
2.驗證數字在數字型別中是用來展示長度的
create table t14(id int(8) unsigned zerofill);
insert into t14 values(1111);
insert into t14 values(111111111);
zerofill : 運用0填充驗證
unsigned : 去除正負號
3.結論:以後遇到數字型別不要指定數字 讓他使用自帶的即可
create table t15(id int);
五:char與varchar差異
1.char()與varchar()數字的差異
char(4) : 定長
最多儲存4個字元 超出了則報錯 沒超出則用空格填充
varchar(4) : 變長
最多儲存4個字元 超出了則報錯 沒超出則有幾個儲存幾個
2.驗證char定長特性
create table t17(id int,name char(5));
insert into t17 values(1,'tom');
3.統計某個欄位資料對應的長度
char_length()
4.上述方法還是無法驗證 需要先(取消底層優化操作)
set global sql_mode='strict_trans_tables,pad_char_to_full_length'
5.退出MySQL重啟啟動後生效
exit
mysql -uroot -p
6.查詢已經修改成功
show variables like '%mode%';
5. 再次驗證
insert into t17 values(2,'a');
6.檢視長度(沒超出則用空格填充)
select char_length(name) from t17;
7.驗證varchar變長特性
create table t18(id int,name varchar(5));
insert into t18 values(1,'tom');
8.檢視長度
select char_length(name) from t18;
六:char與varchar對比(那個比較好)
1.char(全面介紹)
char
優勢:整存整取 速度快
劣勢:浪費儲存空間
char作用:
char在儲存時:固定了字元的長度不夠的會空格填充。在取得時候固定取存時候的長度即可
char儲存格式:
char(6)
jason tony jack kevin
2.varchar(全面介紹)
varchar
優勢:節省儲存空間
劣勢:存取資料的時候都需要先考慮報頭 速度較於char慢
varchar作用:
varchar在儲存時: 沒有固定字元的長度。在每次取得時候會有一個報頭,先取報頭然後再取真實資料
varchar儲存格式:
varchar(6)
1bytes+jason1bytes+tony1bytes+jack1bytes+kevin
3.總結
所以在儲存資料長度差異不大得時候使用char,資料長度差異很大情況下使用varchar