天天看點

mysql資料類型

mysql資料類型-int

mysql資料類型

int 的有符号和無符号的差別

  • 有符号的int可以插入負值,無符号的int不可以插入負值

整型的每一種都分無符号(unsigned)和有符号(signed)兩種類型(float和double總是帶符号的),在預設情況下聲明的整型變量都是有符号的類型(char有點特别),如果需聲明無符号類型的話就需要在類型前加上unsigned。

無符号版本和有符号版本的差別就是無符号類型能儲存2倍于有符号類型的正整數資料,比如16位系統中一個smallint能存儲的資料的範圍為-32768~32767,而unsigned能存儲的資料範圍則是0~65535。

由于在計算機中,整數是以補碼形式存放的。根據最高位的不同,如果是1,有符号數的話就是負數;如果是無符号數,則都解釋為正數。另外,unsigned若省略後一個關鍵字,大多數編譯器都會認為是unsigned int。

簡而言之就是由于Int型占4位元組,也就是16位,2^16 = 65535,如果有符号位就+ -兩邊均分,如果沒有就全給+。

int 有符号測試

#建立一個有符号的int類型的abc的表create table bcd (a int,b int);#int類型不聲明則預設為有符号

#插入資料insert into bcd values(1,2);

#查詢資料select * from bcd;

#查詢2-1:結果為1select b-a from bcd;

#查詢1-2:結果為-1select a-b from bcd;      

測試結果:

mysql資料類型

int 無符号測試

#建立一個無符号的int類型的abc的表create TABLE abc (a int unsigned,b int unsigned);

#插入資料insert into abc values(1,2);

#查詢資料select * from abc;

#查詢2-1:結果為1select b-a from abc;

#查詢1-2:結果異常select a-b from abc;      

 測試結果:超出精度異常

mysql資料類型

int(n):其中的n是什麼意思?

  • n 的意思是顯示長度:若結果長度小于 n 則會自動前面加 0 進行補齊,若結果長度不小于 n 則正常顯示
#建立一個int(4)的資料庫表create table test_int_n (a int(4) zerofill);-- Ps:若不加 zerofill 則沒什麼鳥用
#在裡面插入兩條資料(一個值為1;一個值為123456)insert into test_int_n values(1),(123456);      

#mysql bin 指令行>查詢結果

mysql資料類型

Ps:在工具中查詢無效果

mysql資料類型

mysql中的int自增

  • 1.自增隻能建立在主鍵上面
  • 2. null 和 0 都可以自自增
  • 3. 可以在自增列插入負值

#建立自動增長:會報錯create table test_auto_increment(a int auto_increment);      
mysql資料類型

\

#建立自動增長:建立成功create table test_auto_increment(a int auto_increment primary key);      
mysql資料類型

 null 和 0 都可以自增

測試插入 null
#在自增表裡面插入資料insert into test_auto_increment values(null),(10),(null),(100),(null);

#查詢自增表中的資料select * from test_auto_increment;      
mysql資料類型
測試插入0

插入前查詢

mysql資料類型
#在自增表中插入0:是和null一樣自增的insert into test_auto_increment values(0);      

 插入後查詢:

mysql資料類型
mysql資料類型

 Ps : 插入 0 或 插入 null 執行一次後結果為 102 ,若把 102 删除後,再執行插入 0 或 插入 null ,則會在 102 的基礎上自增,無關 102 是否被删除

3.可以在自增列插入負值

#在自增表中插入負值:是可以執行成功的
insert into test_auto_increment values(-1);      
mysql資料類型
mysql資料類型

mysql資料類型-字元類型

mysql資料類型

字元(n)中的 n 是字元還是位元組?

char(n) 和varchar(n) 中的 n 是字元還是位元組?

答:字元。

text(n)  中的 n 是字元還是位元組?

答:位元組。

除了 char 和 varchar 中的 n 是字元,其他的都是位元組。

資料庫中有true和false嗎?

資料庫中隻有0和1,沒有true和false;

1:相當于 true;0:相當于false。

#1:相當于trueselect 'a' = 'a';
#0:相當于falseselect 'a' = 'b';      

運作結果:

mysql資料類型
mysql資料類型

資料庫中排序規則裡面的 bin 和 ci 是什麼意思?

bin:二進制的方式存儲的,大小寫敏感(不會忽略大小寫)。

ci:大小寫不敏感(會忽略大小寫)。

sql測試:

mysql資料類型
#設定為utf8mb4_binset names utf8mb4 collate utf8mb4_bin;      
mysql資料類型
mysql資料類型

mysql 擷取varchar類型數字最大值

SELECT MAX(CAST(no AS SIGNED)) FROM sys_user ;      

mysql資料類型-時間類型

mysql資料類型

date、timestamp和datetime的差別是什麼?

  • date表示日期,其範圍為1000-01-01到9999-12-31
  • datetime表示日期時間,其範圍是1000-01-01 00:00:00到9999-12-31 23:59:59
  • timestamp表示時間戳,1970-01-01 00:00:00到2038-01-19 03:14:07,timestamp具有自動初始化和自動更新功能。

  timestamp:有時區的概念;datetime:沒有時區的概念

sql測試timestamp和datetime的差別

#建立一個時間類型的表create table test_time (a timestamp,b datetime);

#插入資料insert into test_time values(NOW(),NOW());      
#查詢時間的環境變量select @@time_zone;      
mysql資料類型

 當時間的環境變量為 SYSTEM 時,看不出差別

mysql資料類型
#修改時間的環境變量set time_zone='+00:00';      
mysql資料類型

繼續閱讀