1. MySQL數據類型
1.1. 數據類型(列類型)總覽
可見,mysql中的數據類型,總體分3大類:
數字型:
時間型:
字符型:
其中,在sql語句中,數字型數據不需要單引號引起來,而時間型和字符型數據需要用單引號引起來。
1.2. 整型
整型數據類型包括:
tinyint :微整型
smallint :小整型
mediumint :中整型
int :整型
bigint :大整型
這些不同大小范圍的整型信息如下表所示:
類型 |
所占空間 (字節) |
帶符號 |
無符號 |
||
最小值 |
最大值 |
最小值 |
最大值 |
||
tinyint |
1 |
-128 |
127 |
0 |
255 |
smallint |
2 |
-32768 |
32767 |
0 |
65535 |
mediumint |
3 |
-8388608 |
8388607 |
0 |
16777215 |
int |
4 |
-2147483648 |
2147483647 |
0 |
4294967295 |
bigint |
8 |
-9223372036854775808 |
9223372036854775807 |
0 |
18446744073709551615 |
默認整數類型是帶符號的,即可以有正負值,比如:
create table zhengxing1(num1 int, num2 tinyint);
此時,num1和num2中都可以存儲負數(但都不能超出范圍)
不帶符號的整數類型設置形式如下:
create table zhengxing2(num1 int unsigned, num2 tinyint unsigned);
1.3. 小數型
小數類型分為浮點小數和定點小數。
1.3.1. 浮點小數
浮點小數是“不精確的小數”,包括float和double。
float:
占用4字節存儲空間,可稱為“單精度浮點數”,約7位有效數字。
double:
占用8字節存儲空間,可稱為“雙精度浮點數”,約17位有效數字。
1.3.2. 定點小數
定點小數是“精確的小數”——它通過內部技巧,突破了“有些小數無法用二進制精確表示”的局限。
其設定方式通常是這樣的: decimal(M, D);
其中M表示該小數的總的有效位數(最大65),D表示該小數的小數點后的位數。
演示:
定義三個字段分別為float、double和decimal類型,並都插入數字“123456789.123456789123456789”,顯示結果。
數據類型選擇示例:
1.4. 日期時間型
日期時間類型包括如下幾種:
date類型:
表示日期,格式類似這樣:'0000-00-00'
time類型:
表示時間,格式類似這樣:'00:00:00'
datetime類型:
表示日期時間,格式類似這樣:'0000-00-00 00:00:00'
timestamp類型:
表示“時間戳”,其實就是一個整數數字,該數字是從是“時間起點”到現在為止的“秒數”。
“時間起點”是:1970-1-1 0:0:0
timestamp類型的字段,無需插入數據,而是會自動取得當前的日期時間(表示當前時刻)。
而且,此類型字段會在數據被更新時,也同樣自動取得當前的日期時間(表示修改的時刻)。
特別總結:它在insert或update某行數據的時候,能夠自動獲得當前時間。
year類型:
表示年份,格式為:'0000'
注意:
時間類型的字面值,通常使用單引號引起來
示例:
創建一個表,設定5個字段分別為上述類型,並插入相應的數據值后查看結果。
now()函數的使用:
更新數據,以對比datetime類型的數據和timestamp類型的數據的區別:
小細節:timestamp類型在一個表中只能用於一個字段!
1.5. 字符串型
字符串類型常用的包括:char, varchar, text, enum, set,分述如下:
1.5.1. 定長字符char和變長字符varchar
l 定長字符類型char:
適用於存儲的字符長度為固定長度的字符,比如中國郵政編碼,中國身份證號碼,手機號碼等。
設定形式:
字段名稱 char(字符個數)
其特點是:
1,存儲的字符長度固定,最長可設定為255個字符。
2,如果實際寫入的字符不足設定長度,內部會自動用空格填充到設定的長度。
3,相對varchar類型,其存取速度更快。
l 變長字符類型varchar:
適用於存儲字符長度經常不確定的字符,比如姓名,用戶名,標題,內容,等大多數場合的字符。
設定形式:
字段名稱 varchar(字符個數)
其特點是:
1,存儲的字符長度是寫入的實際長度,但不超過設定的長度。最長可設定為65532(字節)。
(1) 注:由於其最長的限制是字節數,因此存儲中文和英文的實際字符個數是不同的;
(2) 英文:一個字符占一個字節;
(3) 中文(gbk編碼):一個字符占2個字節;
(4) 中文(utf8編碼):一個字符占3個字節;
2,如果實際寫入的字符不足設定的長度,就按實際的長度存儲。
3,相對於char字符串,其存取速度相對更慢。
示例:
定義一個表,演示char和varchar的使用和區別:
思考題:
一個表中有一個字段為c1,其類型為char(10),另有一個字段為c2,類型為varchar,問:
c2最多可以設置多長?
答:
1,一個表中的行也有一個“最大字節長度的限制”,一行最多存儲65532字節。
2,則此時,c2最多可以設置65532-10 = 65522(長度設定)
3,如果c2中存儲的全是英文字符,就可以存儲65522個
4,如果存儲中文:
gbk:最多65522/2 = 32761個
utf8:最多65522/3 = 21840個
1.5.2. text長文本類型
適用於存儲“較長的文本內容”,比如文章內容。最長可存儲65535個字符。
如果還需要存儲更長的文本,可以使用mediumtext(1600萬左右)或longtext(40億左右)。
設定形式:
字段名稱 text
text類型的字段不能設置默認值。
text類型雖然是字符類型,但不能設置長度!!!
text類型的數據不存在行中。
1.5.3. enum和set類型
enum類型和set類型都是用於存儲“有給定值的可選字符”,比如類似表單中的單選,多選,下拉列表。
l enum類型(單選類型/枚舉類型):
enum類型通常用於存儲表單中的“單選項”的值。
設定形式:
enum(‘選項值1’, ‘選項值2’, ‘選項值3’, ....)
這些選項值都對應了相應的“索引值”,類似索引數組的下標,但是從1開始的。
即這些選項的索引值分別為:1, 2, 3, 4, .....
enum類型最多可設定65535個選項。
示例:
create table tab1 (id int, edu(‘大學’, ‘中學’, ‘小學’, ‘其他’ ) );
insert into tab1 (id, edu) values (1, ‘大學’);
或:
insert into tab1 (id, edu) values (1, 2); //表示中學
l set類型(多選類型):
set類型通常用於存儲表單中的“多選項”的值。
設定形式:
set(‘選項值1’, ‘選項值2’, ‘選項值3’, ....)
這些選項值都對應了相應的“索引值”,其索引值從1開始,並“依次翻倍”。
即這些選項的索引值分別為:1, 2, 4, 8, 16, ..... (其實就是2的n次方)
enum類型最多可設定64個選項值。
示例:
create table tab2 (aihao(‘籃球’, ‘排球’, ‘足球’, ‘中國足球’ ) ); #對應索引值為1,2,4,8
insert into tab2( aihao ) values ( ‘籃球’ );
或:
insert into tab2 ( aihao ) values ( ‘籃球,排球’ );
或:
insert into tab2 ( aihao ) values ( ‘籃球,足球,排球’ );
或:
insert into tab2 ( aihao ) values ( 2 ); //表示排球(2)
或:
insert into tab2 ( aihao ) values ( 3); //表示“籃球,排球”(1+2)
或:
insert into tab2 ( aihao ) values ( 7); //表示“籃球,排球,足球”(1+2+4)
基本示例:
使用索引值來插入數據:
<?php echo "本文筆記轉載於word文檔,並非原創!"; ?>