mysql支援 mysql支援的資料型別

2021-10-19 19:31:42 字數 4747 閱讀 1656

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', '女', '男,女,哇塞');

php 支援 mysql php支援mysql配置

想在centos5.2上裝乙個discuz論壇,在突破了apache許可權問題後,發現discuz的提示資訊裡顯示不支援mysql mysql connect 不支援 請檢查mysql 模組是否正確載入 我自己寫個測試檔案 php view plaincopy phpinfo 執行後顯示 c sha...

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

mysql支援的資料型別 整型 型別 tinyint 1位元組,取值範圍 128 127,預設長度4 smallint 2位元組,取值範圍 32768 32767,預設長度6 mediumint 3位元組 int 4位元組 2147483648 2147483647 bigint 8位元組 約束 u...

mysql支援哪些運算子 MySql支援的運算子

算術運算子 加法 減法 乘法 除法 div,返回商 除法 mod返回餘數。比較運算子 等於 或!不等於 null安全的等於 大於 大於等於 between 存在於指定的範圍 in 存在於指定的集合 is null 為null is not null 不為null like 萬用字元匹配 regexp...