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時,則可以看出兩個時間不同
一般所有時間都是北京東八區的時間。