MySQL資料型別操作(char與varchar)

[oJbK] 發表於 2022-01-25
MySQL

一:MySQL資料型別之整型

1.整型
tinyint		1bytes
smallint	2bytes
int			4bytes
bigint		8bytes

不同型別的int能夠儲存的數字範圍不一樣
image

2.驗證不同型別的int是否會空出一個儲存正負號
create table t6(id tinyint);
insert into t6 values(256),(-129);
得出結論:tinyint預設就會空出一位儲存正負號

"""其實所有的int型別預設都是空出一位儲存正負號"""
image

3.增加約束條件 去除正負號(unsigned)
create table t7(id tinyint unsigned);
insert into t7 values(256),(-129);

結論:正負號可以通過約束條件去除掉

image

二:浮點型

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);

image

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');

image

3.失真原因
出現失真的情況,是因為MySQL配置檔案內缺少了SQL_MODE內嚴格模式程式碼
簡稱:
sql_mode	: 嚴格模式(如果一個資料不符合資料規範就拒絕儲存)本身系統預設自帶
4.SQL_MODE(命令修改)
4.1.模糊查詢(過濾)

show variables like '%mode%';
image

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%';
image

四:研究數字在數字型別與字元型別中的區別

1.驗證數字在數字型別中是否是用來限制儲存長度
create table t13(id int(3));
insert into t13 values(111111);

'''數字在數字型別中並不是用來限制儲存長度 而是用來控制展示長度'''
image

2.驗證數字在數字型別中是用來展示長度的
create table t14(id int(8) unsigned zerofill);
insert into t14 values(1111);
insert into t14 values(111111111);

zerofill : 運用0填充驗證
unsigned : 去除正負號
image

3.結論:以後遇到數字型別不要指定數字 讓他使用自帶的即可

create table t15(id int);
image

五: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');

image

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%';
image

5. 再次驗證

insert into t17 values(2,'a');

6.檢視長度(沒超出則用空格填充)

select char_length(name) from t17;
image

7.驗證varchar變長特性
create table t18(id int,name varchar(5));
insert into t18 values(1,'tom');
8.檢視長度

select char_length(name) from t18;
image

六: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