MySQL学习笔记10

MySQL字符串类型:

CHAR类型:

CHAR类型的字符串为定长.长度范围是0到255之间的任何值.占用定长的存储空间,不足的部分用==空格==填充;读取时删掉后面的空格。

例子:

password char(32)

mobile char(11)

name char(10)

存储空间:

CHAR(==M==)类型的存储空间和字符集有关系,一个中文在utf8字符集中占用3个bytes、gbk占用2个bytes、数字和字符统一用一个字符表示。

存储机制:

在不够M长度时,MySQL在存储数据时,需要填充特殊的空格。

举例说明:

字段名称 CHAR(M) , M 表示字符数。

应用场景:

CHAR比较适合存储确定的固定长度的字符串。

加密后的密码 => char(32),手机号码mobile(11),身份证号码等等。

案例:创建一个tb_admin数据表,定义字段(id、username、password)

mysql> create table tb_admin (
    -> id tinyint unsigned not null auto_increment,
    -> username varchar(20),
    -> password  char(32),
    -> primary key(id)
    -> )engine=innodb default charset=utf8;
Query OK, 0 rows affected (0.00 sec)


mysql> desc tb_admin;
+----------+---------------------+------+-----+---------+----------------+
| Field    | Type                | Null | Key | Default | Extra          |
+----------+---------------------+------+-----+---------+----------------+
| id       | tinyint(3) unsigned | NO   | PRI | NULL    | auto_increment |
| username | varchar(20)         | YES  |     | NULL    |                |
| password | char(32)            | YES  |     | NULL    |                |
+----------+---------------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)


mysql> insert into tb_admin values(null,'admin',md5('admin888'));
Query OK, 1 row affected (0.00 sec)


mysql> select * from tb_admin;
+----+----------+----------------------------------+
| id | username | password                         |
+----+----------+----------------------------------+
|  1 | admin    | 7fef6171469e80d32c0559f88b377245 |
+----+----------+----------------------------------+
1 row in set (0.00 sec)

MD5是内置的加密函数。

VARCHAR类型:

VARCHAR是变长存储,仅使用必要的存储空间。

name  varchar(10)    根据你要插入的内容决定你的存储空间。

存储空间:

VARCHAR(M)类型的存储空间和字符集有关系,一个中文在utf8字符集中占用3个bytes、gbk占用2个bytes、数字和字符统一用一个字符表示。

存储机制:

VARCHAR(M)字段存储实际是从第二个字节开始存储,然后用1到2个字节表示实际长度,剩下的才是可以存储数据的范围,因此最大可用存储范围是65535-3=65532字节;

第一个字节标识是否为空.(长度小于255字节,使用一个字节来表示长度;大于255字节使用两个字节来表示长度)。

应用场景:主要适合存储长度不固定的字符串信息,如用户名称、产品标题、新闻标题、新闻描述(不超过255个字符)

案例:

案例:创建一个tb_news数据表,定义字段(id、title、description、addtime)

mysql> create table tb_news (
    -> id int unsigned not null auto_increment,
    -> title varchar(80),
    -> description  varchar(255),
    -> addtime date,
    -> primary key(id)
    -> )engine=innodb default charset=utf8;
Query OK, 0 rows affected (0.00 sec)


mysql> desc tb_news;
+-------------+------------------+------+-----+---------+----------------+
| Field       | Type             | Null | Key | Default | Extra          |
+-------------+------------------+------+-----+---------+----------------+
| id          | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| title       | varchar(80)      | YES  |     | NULL    |                |
| description | varchar(255)     | YES  |     | NULL    |                |
| addtime     | date             | YES  |     | NULL    |                |
+-------------+------------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

char(10)

varchar(10)

char在读取速度上要快点,varchar在存储空间上有优势。

TEXT类型:

TEXT代表文本类型的数据,当我们使用VARCHAR类型存储数据时(早期最大只能存储255个字符,MySQL5版本中,其gbk可以存储3万多个字符,utf8格式可以存储2万多个字符),如超过了VARCHAR的最大存储范围,则可以考虑使用TEXT文本类型。

经验之谈:255个字符以内(包括),定长就使用CHAR类型,变长就使用VARCHAR类型,如果超过255个字符,则使用TEXT文本类型。

应用场景:文本内容、产品的详细介绍等等。

案例:创建一个tb_goods产品表,定义字段(id、name、price、content)

mysql> create table tb_goods (
    -> id int unsigned not null auto_increment,
    -> name varchar(80),
    -> price  decimal(11,2),
    -> content text,
    -> primary key(id)
    -> )engine=innodb default charset=utf8;
Query OK, 0 rows affected (0.00 sec)

mysql>
mysql> desc tb_goods;
+---------+------------------+------+-----+---------+----------------+
| Field   | Type             | Null | Key | Default | Extra          |
+---------+------------------+------+-----+---------+----------------+
| id      | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| name    | varchar(80)      | YES  |     | NULL    |                |
| price   | decimal(11,2)    | YES  |     | NULL    |                |
| content | text             | YES  |     | NULL    |                |
+---------+------------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

其他类型:

BLOB:保存二进制的大型数据(字节串),没有字符集,eg:图片、音频视频等。

实际运维工作中,很少将文件直接保存在数据库端,一般文件的存储都是基于路径进行操作的。

ENUM枚举类型:多选一,从给定的多个选项中选择一个,如gender enum('男','女','保密')

SET集合类型:多选多,从给定的多个选项中选个多个,如hobby set('吃饭','睡觉','打豆豆')

你可能感兴趣的:(MySQL,mysql)