MySQL數據類型操作(char與varchar)

  • 2022 年 1 月 25 日
  • 筆記

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

Tags: