MySQL數據類型操作(char與varchar)
- 2022 年 1 月 25 日
- 筆記
一: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
