mysql數據類型


mysql數據類型-int

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:結果為1
select b-a from bcd;

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

測試結果:

int 無符號測試

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

#插入數據
insert into abc values(1,2);

#查詢數據
select * from abc;

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

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

 測試結果:超出精度異常

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 命令行>查詢結果

Ps:在工具中查詢無效果

 

mysql中的int自增

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

1.自增只能創建在主鍵上面

#創建自動增長:會報錯
create table test_auto_increment(a int auto_increment);

\

#創建自動增長:創建成功
create table test_auto_increment(a int auto_increment primary key);

 

 null 和 0 都可以自增

測試插入 null
#在自增表里面插入數據
insert into test_auto_increment values(null),(10),(null),(100),(null);

#查詢自增表中的數據
select * from test_auto_increment;

 

測試插入0

插入前查詢

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

 插入后查詢:

 

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

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

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

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:相當於true
select 'a' = 'a';
#0:相當於false
select 'a' = 'b';

運行結果:

數據庫中排序規則里面的 bin 和 ci 是什么意思?

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

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

sql測試:

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

#設置為utf8mb4_bin
set names utf8mb4 collate utf8mb4_bin;

 

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

 

mysql 獲取varchar類型數字最大值

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

 

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;

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

#修改時間的環境變量
set time_zone='+00:00';

  當時間的環境變量為 +00:00時,則可以看出兩個時間不同

 一般所有時間都是北京東八區的時間。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM