【MySQL】varbinary 真的比varchar 更合适?

本文通过创建和操作varbinary与varchar类型的表,插入数据并观察警告信息,揭示了varbinary在处理某些数据时可能会截断的问题。通过查询性能测试,发现查询varbinary和varchar字段在性能上接近,但varbinary可能更适用于存储二进制数据。
摘要由CSDN通过智能技术生成
一 前言
    在讨论数据表字段设计的时候,有同学提出使用vabinary 代替 varchar ,部分开发不明所以,其实我也是。两者之间具体有什么区别?使用vabinary 代替 varchar 对业务有何优势?本文尝试从性能,数据大小,查询,创建索引等对比功能等方面进行研究,有不妥或者不到位之处还请各位读者朋友提示。
二 对比测试
2.1 测试环境
 数据库版本 Percona Server 5.6.24-72.2-log
  1. create table vbinary
  2. (
  3.   id int primary key auto_increment ,
  4.   val varbinary(776) not null default ''
  5. ) engine=innodb default charset=utf8mb4;

  6. create table vachar
  7. (
  8.   id int primary key auto_increment ,
  9.   val varchar(12) not null default ''
  10. ) engine=innodb default charset=utf8mb4;
  11. insert into vbinary(val) values('abaa'),('aabb'),('bcdd'),('ccdd');
  12. insert into vachar(val) values('abaa'),('aabb'),('bcdd'),('ccdd')
2.2 定义
   varchar(N)   字符串类型,用于存储变长字符串,使用表默认或者指定的校验集合,其中N代表存储字符的个数,详细信息请移步 《浅谈varchar(N)》.
   varbinary(N)二进制字符串类型,以 二进制字节串存储字符,无字符集校验区别,均以二进制实际数值作比较。
2.3 长度定义
varchar存储的是字符个数,varbinary存储的是字节个数。
  1. test [RW] 10:57:50 >insert into vbinary (val,name) value('2msdmlsdyo2enwlenw','disodmalsdsi');
  2. Query OK, 1 row affected, 1 warning (0.00 sec)
  3. test [RW] 10:57:55 >show warnings;
  4. +---------+------+------------------------------------------+
  5. | Level | Code | Message |
  6. +---------+------+------------------------------------------+
  7. | Warning | 1265 | Data truncated for column 'val' at row 1 |
  8. +---------+------+------------------------------------------+
  9. 1 row in set (0.00 sec)
  10. test [RW] 10:58:11 >insert into vbinary (val,name) value('有赞是一家移动零售服务提供商','disodmalsdsi');
  11. Query OK, 1 row affected, 1 warning (0.01 sec)
  12. test [RW] 10:59:00 >show warnings;
  13. +---------+------+------------------------------------------+
  14. | Level | Code | Message |
  15. +---------+------+------------------------------------------+
  16. | Warning | 1265 | Data truncated for column
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值