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

本文涉及的产品
云原生数据库 PolarDB 分布式版,标准版 2核8GB
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 本文介绍了如何使用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等编码,都有一定的概率报语法错误。

相关文章
|
Web App开发 负载均衡 测试技术
使用IIS Server Farms搭建应用服务负载均衡
当公司的业务扩大, 伴随着大量的请求,应用服务器的承受能力已经不能满足不断增长的业务需求,使用IIS Server Farms搭建应负载均衡的方式,把请求分发给不同的应用服务器进行处理,这个时候就降低了应用服务器的压力。
2538 0
|
安全 网络协议
最新可靠好用的DNS服务器地址汇总
如果修改DNS服务器地址就可以访问google等服务,你还等什么?使用免费DNS解析服务除了去掉了运营商的各种广告,还有个最大的好处就是不会重定向或者过滤用户所访问的地址,这样就防止了很多网站被电信、网通劫持,有利于提供访问一些国外网站的成功率 如googlecode,网友应该养成不使用默认DNS的习惯,笔者汇总了常用可靠的DNS服务器地址。
15651 0
|
存储 网络协议
计算机基础之MB、Mb、MBps、Mbps
计算机基础之MB、Mb、MBps、Mbps
|
存储 Java 测试技术
《手把手教你》系列技巧篇(六十九)-java+ selenium自动化测试 - 读取csv文件(详细教程)
【6月更文挑战第10天】本文介绍了如何在Java中读取CSV文件。首先解释了CSV是逗号分隔值的文本文件,常用于数据交换。接着,在项目实战部分,详细说明了如何通过下载并引入opencsv库来读取CSV文件:包括下载jar包、添加到Eclipse项目、创建CSV文件、编写Java代码读取文件内容,并展示了代码执行后的输出结果。文章以一个简单的代码示例展示了如何使用opencsv读取CSV文件中的数据。
171 0
|
存储 Cloud Native 安全
云计算:未来的计算模式
云计算将计算资源集中于远程服务器,通过互联网提供便捷、高效的弹性服务,引发计算革命。企业受益于更低的成本、更高的效率和灵活性。其优势在于弹性扩展、便捷性、成本节约和创新加速。最佳实践涉及战略规划、服务选择、数据安全和云原生开发。随着技术发展,云计算将成为主流计算模式,推动数字化转型和经济发展。
|
搜索推荐 开发者
天猫精灵个人技能开发体验
天猫精灵个人技能开发体验
862 0
天猫精灵个人技能开发体验
|
自然语言处理 算法 数据可视化
全新优化版秒合约多语言python版系统开发部署
web3 = web3.Web3(web3.HTTPProvider('YOUR_ETHERUM_NODE_URL')) contract_address = 'YOUR_CONTRACT_ADDRESS' contract = web3.eth.contract(address=contract_address, abi=YOUR_CONTRACT_ABI)
|
SQL 存储 关系型数据库
MySQL 入门:Case 语句很好用
MySQL CASE 是一个 MySQL 语句查询关键字,它定义了处理循环概念以执行条件集并使用 IF ELSE 返回匹配案例的方式。 MySQL 中的 CASE 是一种控制语句,它验证条件案例集,并在第一个案例满足 else 值时显示值并退出循环。
|
Web App开发 边缘计算 分布式计算
|
算法 数据安全/隐私保护
密码学复习——第二章(流密码)
密码学复习——第二章(流密码)
1457 0
密码学复习——第二章(流密码)