Mysql数据库中的字段长度是指字节还是字符

刚遇到这个问题纠结于是指字节还是字符,然后中文又占几个字节......

后来在网上查到了用事实说话的例子:

来源:https://segmentfault.com/q/1010000003040054

现引用如下:

MySQL 的字符大小和字符集有关,如果字符集是 ascii,保存不了中文(会显示成乱码),如果是 UTF8,每个字符是1-3个字节。

用事实说话

试验用的 MySQL 5.6

先检查数据库字符集

show variables like '%char%';

结果:UTF8

Variable_name Value
character_set_client utf8mb4
character_set_connection utf8mb4
character_set_database utf8
character_set_filesystem binary
character_set_results utf8mb4
character_set_server utf8
character_set_system utf8
character_sets_dir D:\Program Files\MySQL\MySQL Server 5.6\share\charsets\

创建表(注意:varchar(10)

CREATE TABLE `test_char` (
    `s` VARCHAR(10) NULL DEFAULT NULL
)

插入数据

十字ASCII字符,正确执行

insert into test_char
(s)
values
('0123456789')
;

十个中文字符,正确执行

insert into test_char
(s)
values
('一二三四五六七八九十')
;

但是十一个ASCII或中文都是报错,说数据太长。

结论

长度是当前字符集的字符长度,而不是字节长度!


  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值