最佳实践—如何使用Blob对象

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云原生数据库 PolarDB 分布式版,标准版 2核8GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 本文介绍了如何使用Blob对象。

Java的MySQL各版本驱动(包括5.1.x和8.0.x),在实现PreparedStatement.setBlob方法时都有一些缺陷(无论连接的是mysql server还是PolarDB-X,都存在缺陷),对于一些用于存储二进制格式(例如图片、视频等)的Blob对象,会有概率性的报出语法错误,本文列出一些需要注意的地方。

场景一:PolarDB-X版本<5.4.9

对于低版本的PolarDB-X,其自身不支持SQL中直接携带与连接串字符集不符的二进制信息,需要在客户端转义成如下列所示的十六进制字符串。


insert into t1 values (0xaabbccdd,x'aabbccdd');

方法1:对于Java用户,可以使用PreparedStatement.setBytes方法替换setBlob方法,mysql驱动会将byte[]转义成十六进制字符串。

方法2:对于Java用户,如果不方便使用方法1(例如使用Hibernate等框架,无法控制框架使用哪个set方法),请联系阿里云技术支持,我们会提供一个定制的mysql驱动包,该驱动包内会完成转义。

方法3:对于其他语言用户,请在应用程序中自行完成转义。

场景二:5.4.9<=PolarDB-X版本<5.4.13

该版本的PolarDB-X,额外支持了_binary前缀。因此,除了场景一中的方法继续适用之外,还有以下方法可以使用:

方法4:对于Java用户,可以修改SQL语句,例如原语句:


insert into t1 values (?)

修改为:


insert into t1 values (_binary?)

方法5:对于Java用户,可以使用8.0.26版本的mysql驱动,该驱动在setBlob方法内会自动加上_binary前缀。

场景三:PolarDB-X版本>=5.4.13

该版本比较彻底的兼容了mysql对于二进制信息的处理,上述场景一和场景二的方法继续适用,还有以下方法可以使用:

方法6:使用utf8/utf8mb4连接数据库,例如对于Java用户,jdbcurl中加入参数:


useUnicode=true&characterEncoding=utf8

对于其他语言用户,可以在建完连接后,执行:


set names utf8mb4;

实际上,mysql驱动对于setBlob的实现是有问题的,即使是使用官方mysql server,也必须在连接使用utf8/utf8mb4编码的情况下,才能很好的支持setBlob这种使用方法;对于gbk等编码,都有一定的概率报语法错误。

相关文章
|
内存技术
STM32F103 五个时钟源
STM32F103 五个时钟源
885 0
|
人工智能 监控 物联网
探索信息技术的前沿:推动社会进步与创新的强大力量
探索信息技术的前沿:推动社会进步与创新的强大力量
407 3
|
人工智能 算法 自动驾驶
智能时代的伦理困境:AI技术的道德边界
【7月更文挑战第26天】在AI技术的飞速发展中,我们不仅见证了科技的奇迹,也面临着前所未有的伦理问题。本文探讨了人工智能带来的道德挑战,包括隐私侵犯、自动化失业、算法偏见以及决策责任归属等问题。通过分析这些伦理困境,文章旨在引发对AI技术应用中道德边界的深入思考和讨论。
|
存储 算法 测试技术
【软件工程】软件工程复习题库2023
【软件工程】软件工程复习题库2023
440 0
|
运维 DataWorks 监控
DataWorks常见问题之如何批量补数据
DataWorks是阿里云提供的一站式大数据开发与管理平台,支持数据集成、数据开发、数据治理等功能;在本汇总中,我们梳理了DataWorks产品在使用过程中经常遇到的问题及解答,以助用户在数据处理和分析工作中提高效率,降低难度。
382 1
您在阿里云网盘与相册服务支付后可以要求开具发票
您在阿里云网盘与相册服务支付后可以要求开具发票【1月更文挑战第13天】【1月更文挑战第62篇】
525 2
|
数据安全/隐私保护
⊕是什么意思
⊕是什么意思
1915 0
⊕是什么意思
|
缓存 NoSQL 前端开发
springboot+vue前后端分离实现企业人事管理系统
系统是前后端分离的项目,直接启动Springboot应用程序类后,再启动前端工程访问即可。主要实现 了企业的人事管理功能,主要包含员工管理、薪资管理、职位管理、权限管理、网盘文件分享管理等模块。 系统亮点:使用REDIS进行数据缓存,优化查询性能;使用分布式文件系统进行文件存储服务;基于Springboot+vue实现前后端分离开发
711 0
springboot+vue前后端分离实现企业人事管理系统
|
前端开发 JavaScript 测试技术
Ant Design 开源项目经验分享,你想知道的都在这儿了
如何成功的运作一个开源项目?来自Ant Design灵魂人物偏右的全干货分享。
Ant Design 开源项目经验分享,你想知道的都在这儿了