字符串类型常用的包括: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的使用和区别:
![](https://img.kancloud.cn/96/37/963739e3d58ca41b7c75d8d9997917b3_612x513.jpg)
思考题:
一个表中有一个字段为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类型的数据不存在行中。
![](https://img.kancloud.cn/bc/ed/bceda0980117d38d512614129d3212a6_624x278.jpg)
## 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)
```
基本示例:
![](https://img.kancloud.cn/4a/ab/4aabb46e677b0d33b2d36c59c48a70cf_556x282.jpg)
使用索引值来插入数据:
![](https://img.kancloud.cn/6d/18/6d18cd07465bfe067eece6d192223c19_523x194.jpg)
![](https://img.kancloud.cn/0b/e8/0be80506f01c2d4e354f226796b89ccb_463x182.jpg)
- 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.取消用户授权