1.1.1. int型別
型別位元組
最小值最大值
(帶符號的/無符號的)
(帶符號的/無符號的)
tinyint
-128
smallint
-32768
mediumint
-8388608
int-2147483648
bigint
-9223372036854775808
1.1.1.1. 有無符號
在專案中主鍵使用bigint,而且是有符號的(因為無符號的運算時出現負數會報錯)。
演示create table test_unsigned(a int unsigned, b int unsigned);
insert into test_unsigned values(1, 2);
select b - a from test_unsigned; --執行正常
select a - b from test_unsigned; --執行出錯
1.1.1.2. int(n)是什麼?
演示(需要在linux上才能看出區別)
create table test_int_n(a int(4) zerofill);
insert into test_int_n values(1);
insert into test_int_n values(123456);
---結果,都能插入成功
l int(n)中的n是顯示寬度, 不表示 儲存的數字的 長度 的上限。
l zerofill 表示當儲存的數字 長度< n時,用 數字0填充左邊,直至補滿長度n
l 當儲存數字的長度 超過n時 ,按照 實際儲存 的數字顯示
1.1.1.3. 自動增長的面試題
這列語法有錯誤嗎?
create table test_auto_increment(a int auto_increment);
---插入報錯(非主鍵,不能自增)
create table test_auto_increment(a int auto_increment primary key);
---插入成功,主鍵能自增
以下結果是什麼?
insert into test_auto_increment values(null);
--插入成功,值:1
insert into test_auto_increment values(0);
--插入報錯(不能插入0)
insert into test_auto_increment values(-1);
--插入成功,值:-1
insert into test_auto_increment values(null),(100),(null),(10),(null)
-- 1,100,101,10,11 (從上一條資料の資料值+1 遞增)
1.1.2. 字元型別(除了char跟vachar是字元,其餘都是位元組)
型別說明
n的含義
是否有字符集
最大長度
char(n)
定長字元字元是
varchar(n)
變長字元字元是
binary(n)
定長二進位制位元組位元組否
varbinary(n)
變長二進位制位元組位元組否
tinyblob(n)
二進位製大物件位元組否
blob(n)
二進位製大物件位元組否
16kmediumblob(n)
二進位製大物件位元組否
16mlongblob(n)
二進位製大物件位元組否
4gtinytext(n)
大物件位元組
是text(n)
大物件位元組
是16k
mediumtext(n)
大物件位元組
是16m
longtext(n)
大物件位元組是4g
1.1.2.1. 排序規則(ci跟bin)
當建立乙個utf-8_ci排序規則的資料庫,插入資料a、a執行下面操作:
select 'a' = 'a';
--結果:1 (資料庫中用1和0表示true跟false)
create table test_ci (a varchar(10), key(a));
insert into test_ci values('a');
insert into test_ci values('a');
select * from test_ci where a = 'a'; --結果是什麼?
--結果:a、a都顯示出來了
重新設定當前字元排序規則後,再執行where a = 'a' ....
set names utf8mb4 collate utf8mb4_bin
--結果:只有a顯示
總結:mysql中ci排序規則不區分大小寫,bin排序規則區分大小寫(轉換成二進位制比較)
1.1.3. 時間型別
日期型別
占用空間
表示範圍
datetime
1000-01-01 00:00:00 ~ 9999-12-31 23:59:59
date
1000-01-01 ~ 9999-12-31
timestamp
1970-01-01 00:00:00utc ~ 2038-01-19 03:14:07utc
year
year(2):1970-2070, year(4):1901-2155
time
-838:59:59 ~ 838:59:59
datatime與timestamp區別
create table test_time(a timestamp, b datetime);
insert into test_time values (now(), now());
select * from test_time;
select @@time_zone;
set time_zone='+00:00';
select * from test_time;
datatime與timestamp區別:
1.timestamp有時區的概念。(儲存時會轉成mysql預設時區儲存,取值時會反轉成伺服器當前設定的時區時間顯示)
datetime沒有時區的概念。(存值是啥,取值就是啥)
2.timestamp佔4個位元組,也決定了它的最大存值時間是2023年(2023年之後的時間不能存放)
datetime佔8個位元組,最大存值到2023年
3.timestamp存值,預設是資料庫當前時間,更新時也是取當前時間
datetime存值,預設是null
mysql日期物件 MySQL日期型別
主要型別 year time date datetime timestamp 日期函式 current date 當前日期 current time 當前時間 now 當前日期和時間,根據字段型別顯示日期或者時間 實驗timetest表結構 datetime 用於表示年月日時分秒,是 date 和 ...
mysql年齡用什麼型別 MySQL常用資料型別
資料型別是定義列中可以儲存什麼資料以及該資料實際怎麼儲存的基本規則。mysql的常用資料型別主要有一下四種 串資料型別 數值資料型別 日期和時間資料型別 二進位制資料型別 一.串資料型別 這是最常用的資料型別,有兩種基本的串型別 分別為定長串和不定長串。定長串結束長度固定的字元,其長度是建立表是指定...
mysql中real資料型別 MySQL 資料型別
mysql中定義資料欄位的型別對你資料庫的優化是非常重要的。mysql支援多種型別,大致可以分為三類 數值 日期 時間和字串 字元 型別。數值型別 mysql支援所有標準sql數值資料型別。這些型別包括嚴格數值資料型別 integer smallint decimal和numeric 以及近似數值資...