字符串類型常用的包括:char, varchar, text, enum, set,分述如下:
## 6.5.1.定長字符char和變長字符varchar
* 定長字符類型char:
適用于存儲的字符長度為固定長度的字符,比如中國郵政編碼,中國身份證號碼,手機號碼等。
設定形式:
字段名稱 char(字符個數)
其特點是:
1,存儲的字符長度固定,最長可設定為255個字符。
2,如果實際寫入的字符不足設定長度,內部會自動用空格填充到設定的長度。
3,相對varchar類型,其存取速度更快。
* 變長字符類型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個
## 6.5.2.text長文本類型
適用于存儲“較長的文本內容”,比如文章內容。最長可存儲65535個字符。
如果還需要存儲更長的文本,可以使用mediumtext(1600萬左右)或longtext(40億左右)。
設定形式:
字段名稱 text
text類型的字段不能設置默認值。
text類型雖然是字符類型,但不能設置長度!!!
text類型的數據不存在行中。

## 6.5.3.enum和set類型
enum類型和set類型都是用于存儲“有給定值的可選字符”,比如類似表單中的單選,多選,下拉列表。
* 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); //表示中學
```
* 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)
```
基本示例:

使用索引值來插入數據:


- 1、數據庫介紹
- 1.1.主流數據庫
- 1.2.MySQL數據庫概覽
- 1.3.關系數據庫
- 2、訪問mysql數據庫服務器
- 2.1.開啟/關閉數據庫服務
- 2.2.客戶端連接數據庫服務器
- 3、數據庫操作
- 3.1.查看所有數據庫
- 3.2.創建新數據庫
- 3.3.查看數據庫創建信息
- 3.4.刪除現有數據庫
- 3.5.修改現有數據庫
- 3.6.選擇(使用)某個數據庫
- 4、數據表操作
- 4.1.創建數據表初步
- 4.2.查看所有數據表
- 4.3.查看數據表結構
- 4.4.查看數據表的創建語句
- 4.5.刪除數據表
- 4.6.修改數據表
- 5、數據操作初步
- 5.1.插入數據
- 5.2.查詢數據
- 5.3.刪除數據
- 5.4.修改數據
- 6、MySQL數據類型
- 6.1.數據類型(列類型)總覽
- 6.2.整型
- 6.3.小數型
- 6.4.日期時間型
- 6.5.字符串型
- 7、列屬性
- 8、實體與實體的關系
- 8.1.基本概念
- 8.2.一對一關系
- 8.3.一對多關系
- 8.4.多對多關系
- 9、高級查詢
- 9.1.高級查詢語法概述
- 9.2.查詢結果數據及select選項
- 9.3.where子句
- 9.4.mysql運算符
- 9.5.group by子句
- 9.6.having子句
- 9.7.order by子句
- 9.8.limit 子句
- 10、高級插入
- 10.1.同時插入多行記錄
- 10.2.插入查詢的結果數據
- 10.3.set語法插入數據
- 10.4.蠕蟲復制
- 10.5.插入時主鍵沖突的解決辦法
- 11、高級刪除
- 11.1.按指定順序刪除指定數量的數據
- 11.2.truncate清空
- 12、高級更新
- 13、聯合(union)查詢
- 13.1.聯合查詢概念
- 13.2.聯合查詢語法
- 14、連接(join)查詢
- 14.1.連接查詢概述
- 14.2.交叉連接(cross join)
- 14.3.內連接(inner join)
- 14.4.外連接
- 14.5.自連接
- 15、子查詢(subquery)
- 15.1.子查詢的概念
- 15.2.標量子查詢
- 15.3.列子查詢
- 15.4.行子查詢
- 15.5.表子查詢
- 15.6.有關子查詢的特定關鍵字
- 15.7.exists子查詢
- 16、數據管理
- 16.1.數據備份
- 16.2.數據還原(數據恢復)
- 17、用戶管理:
- 17.1.查看用戶
- 17.2.創建用戶
- 17.3.刪除用戶
- 17.4.修改/設置用戶密碼
- 17.5.授予用戶權限
- 17.6.取消用戶授權