你好,我是李辉。
这是专栏的第一篇文章,在专栏的前几个小节,我会先和你先聊一聊 MySQL 的数据类型。了解 MySQL 的数据类型是开发人员在使用 MySQL 数据库的时候,必备的基础技能之一。也正因为此,这部分知识也是面试官面试的时候屡屡提及的高频问题,所以尽量不要在这个地方栽跟头。这一小节我们就先来说说在数据建模设计时使用非常频繁的字符串类型 – VARCHAR。
为了在阅读时不引起歧义,本专栏中我们先做一个简单的约定:
MySQL 数据库版本 5.7
使用 InnoDB 存储引擎
默认隔离级别是 Repeatable Read
默认使用 UTF8 编码
本专栏中的所有文章都使用上述约定,有不同的地方我们再单独做说明。
1. VARCHAR (50) 中的 50 到底是能存 50 个字还是 50 个字节?
我们先做个简单的实验:
mysql> create database imooc_mysql_interview;
Query OK, 1 row affected (0.00 sec)
mysql> use imooc_mysql_interview
Database changed
mysql> create table varchar_test(col_1 varchar(8));
Query OK, 0 rows affected (0.01 sec)
mysql> insert into varchar_test values('ABCDEFGH'),('数一数是不是八个');
Query OK, 2 rows affected (0.01 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> select * from varchar_test;
+--------------------------+
| col_1 |
+--------------------------+
| ABCDEFGH |
| 数一数是不是八个 |
+--------------------------+
2 rows in set (0.00 sec)
从上述实验的结果可知,显然是能存 8 个字符而不是 8 个字节,也就是说 VARCHAR 的括号中的数字代表的是字符。如果存的是字节,由于中文、英文和 emoji 在 utf-8 中的字节数都不一样,势必会给编程造成一定的困扰。
1.1 CHAR (50) 和 VARCHAR (50) 有什么区别?
刚工作不久