mysql中支援的整型 mysql支援的資料型別

2021-10-18 01:45:59 字數 4705 閱讀 3611

mysql支援的資料型別

整型'''型別

tinyint:1位元組,取值範圍-128~127,預設長度4

smallint:2位元組,取值範圍 -32768 ~ 32767,預設長度6

mediumint:3位元組

int:4位元組 -2147483648~2147483647

bigint:8位元組

'''約束

unsigned:無符號

zerofill:0填充

# 建表

mysql>: create table tb1(x tinyint, y smallint, z int(6));

# 插入資料

mysql>: insert into tb1 values(128, 32768, 32768); # 結果:127,32767,32768

# 結論:整型的長度由所佔位元組(取值範圍)決定,可以自定義長度,但是不影響所佔位元組(取值範圍)

# 所有整型變數的長度一般都省略不寫

結論》: create table tb1(x tinyint, y smallint, z int);

# 整型約束

mysql>: create table tb2(x tinyint unsigned); # 0~255

mysql>: insert into tb2 values(256), (-1); # 255, 0

# 0填充約束

mysql>: create table tb3(x tinyint unsigned zerofill);

mysql>: insert into tb3 values(10); # 010

浮點型# 在安全模式下測試浮點型型別

'''型別

float(m, d):4位元組,3.4e–38~3.4e+38

double(m, d):8位元組,1.7e–308~1.7e+308

decimal(m, d):所在位元組m,d大值基礎上+2,其實就是m值+2就是decimal欄位所佔位元組數

'''寬度:

限制儲存寬度

(m, d) => m為位數,d為小數字,m要大於等於d

float(255, 30):精度最低,最常用

double(255, 30):精度高,佔位多

decimal(65, 30):字串存,全精度

# 建表:

mysql>: create table tb4 (age float(256, 30)); # display width out of range for column 'age' (max = 255)

mysql>: create table tb5 (age float(255, 31)); # too big scale 31 specified for column 'age'. maximum is 30.

mysql>: create table tb5 (age float(65, 30)); # 在合理取值範圍

mysql>: create table t12 (x float(255, 30));

mysql>: create table t13 (x double(255, 30));

mysql>: create table t14 (x decimal(65, 30));

# 1.111111164093017600000000000000

mysql>: insert into t12 values(1.11111111111111111119);

# 1.111111111111111200000000000000

mysql>: insert into t13 values(1.11111111111111111119);

# 1.111111111111111111190000000000

mysql>: insert into t14 values(1.11111111111111111119);

# 重點:長度與小數字分析

# 報錯,總長度m必須大於等於小數字d

mysql>: create table t14 (x decimal(2, 3));

# 能儲存 -0.999 ~ 0.999,超長度的小數字會才有四捨五入,0.9994可以存,就是0.999,0.9995不可以存

mysql>: create table t14 (x decimal(3, 3)); # 整數字 3 - 3,所以最大為0

# 能儲存 -9.999 ~ 9.999,超長度的小數字會才有四捨五入,9.9994可以存,就是9.999,9.9995不可以存

mysql>: create table t14 (x decimal(4, 3)); # 整數字 4 - 3,所以最大為9

# 能儲存 -99.999 ~ 99.999,超長度的小數字會才有四捨五入,99.9994可以存,就是99.999,99.9995不可以存

mysql>: create table t14 (x decimal(5, 3)); # 整數字 5 - 3,所以最大為99

字串:資料庫優化 - char效率要高於varchar

'''型別

char:定長,永遠採用設定的長度儲存資料

varchar:不定長,在設定的長度範圍內,變長的儲存資料

'''寬度

限制儲存寬度

char(4):存 "a" "ab" "abc" "abcd"都採用4個長度,"abcde" 只能儲存前4位(安全模式下報錯)

varchar(4):存 "a" "ab" "abc" "abcd"分別採用1,2,3,4個長度儲存,"abcde" 只能儲存前4位(安全模式下報錯)

char就按定長儲存,如果資料長度變化大,通常更佔空間,但是訪問資料按固定定長操作,效率高

varchar儲存資料時,會先計算要儲存資料的長度,動態變長儲存資料,所以一般較省空間,但是計算是需要耗時的,所以效率低

varchar計算出的資料長度資訊也是需要開闢空間來儲存,儲存在資料頭(資料開始前)中,也需要額外消耗1~2個位元組

所以如果資料都是固定長度,或是小範圍波動,char相比就不會更佔空間,且效率高

# 建表:

mysql>: create table ts1 (s1 char(4), s2 varchar(4));

mysql>: insert into ts1 values('adcde', 'xyzabc'); # 'adcd', 'xyza'

時間'''型別

year:yyyy(1901/2155)

date:yyyy-mm-dd(1000-01-01/9999-12-31)

time:hh:mm:ss

datetime:yyyy-mm-dd hh:mm:ss(1000-01-01 00:00:00/9999-12-31 23:59:59)

timestamp:yyyy-mm-dd hh:mm:ss(1970-01-01 00:00:00/2038-01-19 ??)

# 建表:

mysql>: create table td1 (my_year year, my_date date, my_time time);

mysql>: insert into td1 values(1666, '8888-8-8', '8:8:8'); # 時間需要在取值訪問內

mysql>: create table td2 (my_datetime datetime, my_timestamp timestamp);

mysql>: insert into td2 values('2040-1-1 1:1:1', '2040-1-1 1:1:1'); # 時間需要在取值訪問內

mysql>: insert into td2(my_datetime) values('2040-1-1 1:1:1'); # timestamp不複製會才有系統當前時間

# datetime:8位元組,可以為null

# timestamp:4位元組,有預設值current_timestamp

列舉與集合

# 列舉與集合:為某乙個字段提供選項的 - 列舉只能單選(1個),集合可以多選(0-n個)

# 建表

# enum、set預設值為null

mysql>: create table tc1 (name varchar(20), *** enum('男', '女', '哇塞'), hobbies set('男', '女', '哇塞'));

mysql>: insert into tc1 values('ruakei', '哇塞哇塞', '未知');

# enum、set手動設定預設值 '男' 與 '哇塞'

mysql>: create table tc2 (name varchar(20), *** enum('男', '女', '哇塞') default '男', hobbies set('男', '女', '哇塞') default '哇塞');

mysql>: insert into tc2 values('ruakei', '哇塞哇塞', '未知');

mysql>: insert into tc2(name) values('ruakei');

# 對***、hobbies兩個字段賦值錯誤,系統預設用空字串填充(非安全模式),安全模式拋異常

# 如果對出***、hobbies兩個欄位外的其他字段進行賦值,這兩個欄位會才有預設值

# 注:對set型別的字段進行賦值,用乙個字串,字串內部用,將多個選項隔開,且不能新增空格等其他額外字元

mysql>: insert into tc2 values('ruakei_1', '女', '男,女,哇塞');

GNS中支援的模組

gns中支援的模組 dynamips 支援的模組 c7200 開始 slot 0 c7200 io fe 支援1 個fastethernet 介面 c7200 io 2fe 支援2 個fastethernet 介面 dynamipsgui 2.3 裡面沒有這個選項,想用只有自己添 加了 c7200 ...

GNS中支援的模組

dynamips 支援的模組 c7200 開始 slot 0 c7200 io fe 支援1 個fastethernet 介面 c7200 io 2fe 支援2 個fastethernet 介面 dynamipsgui 2.3 裡面沒有這個選項,想用只有自己添 加了 c7200 io ge e 插這...

MySQL中支援emoji表情的儲存(親測可用)

mysql的utf8編碼的乙個字元最多3個位元組,但是乙個emoji表情為4個位元組,所以utf8不支援儲存emoji表情。但是utf8的超集utf8mb4乙個字元最多能有4位元組,所以能支援emoji表情的儲存。下面介紹了關於如何修改mysql資料庫的編碼格式變為utf8mb4的具體方法。linu...