字符和字节的区别
今天顺便说一下varchar(100)中,指的的是字符还是字节,这里给大家准确答案,这其中指
的是字符个数。
字符:
字节:
这里是百度百科的结果,可以很明显的帮大家区别,
简单理解,就是字符是我们看到的,字节是计算机看到的,是不是很明了
这里可能有人会问了
英文字符和中文字符的区别:
我们看一个sql:
mysql [localhost:5731] {msandbox} (test) > show create table t;
+-------+------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+------------------------------------------------------------------------------------------+
| t | CREATE TABLE `t` (
`name` varchar(7) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql [localhost:5731] {msandbox} (test) > select version();
+-----------+
| version() |
+-----------+
| 5.7.31 |
+-----------+
1 row in set (0.00 sec)
mysql [localhost:5731] {msandbox} (test) > insert into t values('abcdefg');
Query OK, 1 row affected (0.00 sec)
mysql [localhost:5731] {msandbox} (test) > insert into t values('abcdefg');
Query OK, 1 row affected (0.00 sec)
#7个字符可以插入刚好
mysql [localhost:5731] {msandbox} (test) > insert into t values('这是测试对的吧');
Query OK, 1 row affected (0.00 sec)
#8个字符长度溢出报错
mysql [localhost:5731] {msandbox} (test) > insert into t values('这是测试对的吧哈');
ERROR 1406 (22001): Data too long for column 'name' at row 1
mysql [localhost:5731] {msandbox} (test) > select * from t;
+-----------------------+
| name |
+-----------------------+
| abcdefg |
| abcdefg |
| 这是测试对的吧 |
+-----------------------+
3 rows in set (0.00 sec)
#字节长度
mysql [localhost:5731] {msandbox} (test) > select length(name) from t;
+--------------+
| length(name) |
+--------------+
| 7 |
| 7 |
| 21 |
+--------------+
3 rows in set (0.00 sec)
#字符长度
mysql [localhost:5731] {msandbox} (test) > select char_length(name) from t;
+-------------------+
| char_length(name) |
+-------------------+
| 7 |
| 7 |
| 7 |
+-------------------+
3 rows in set (0.00 sec)
这里可以看到MySQL对于英文来说:
一个英文字符的存储就是一个字符一个字节
而一个中文字符是三个字节(不同编码不同,utf8编码1中文字符=3个字节,utf8mb4编码1中字符=4个字节)
所以这里大家容易迷糊,
varchar(100)中的100指的是存储的字符的个数,也就是可以存储100个英文字符或者100个中文字符。
而一个英文字符的存储需要一个字节计量单位存储,1个中文在不同的编码下可以存储3个或者4个字节的计量单位存储。
总结
MySQL varchar()括号中的数字指的是字符个数。