MySQL误区—字符和字节的区别

字符和字节的区别

今天顺便说一下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()括号中的数字指的是字符个数。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

渔不是鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值