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

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

相关实践学习
Polardb-x 弹性伸缩实验
本实验主要介绍如何对PolarDB-X进行手动收缩扩容,了解PolarDB-X 中各个节点的含义,以及如何对不同配置的PolarDB-x 进行压测。
相关文章
|
1月前
|
存储 NoSQL 关系型数据库
第5章:知识存储:概述、方法、实战
第5章:知识存储:概述、方法、实战
第5章:知识存储:概述、方法、实战
|
3月前
|
存储 NoSQL MongoDB
请解释一下文档存储数据库的工作原理,并提供一个使用文档存储数据库的实际应用场景。
请解释一下文档存储数据库的工作原理,并提供一个使用文档存储数据库的实际应用场景。
42 0
|
4月前
|
JSON JavaScript 前端开发
JSON概念、基础语法及数据和对象转换
JSON概念、基础语法及数据和对象转换
32 0
|
9月前
|
存储 关系型数据库 MySQL
浅谈Blob及使用场景
浅谈Blob及使用场景
213 0
|
10月前
|
API C++
(4)库示例概述
(4)库示例概述
65 0
|
前端开发
前端学习案例3-blob对象实现图片预览3
前端学习案例3-blob对象实现图片预览3
84 0
前端学习案例3-blob对象实现图片预览3
|
前端开发
前端项目实战145-利用对象属性来转换数据
前端项目实战145-利用对象属性来转换数据
52 0
|
SQL 存储 关系型数据库
最佳实践—如何使用Blob对象
本文介绍了如何使用Blob对象。
|
关系型数据库 PostgreSQL
PostgreSQL 自定义复合类型(composite type) deform引入的额外开销
标签 PostgreSQL , UDT , 自定义类型 背景 PG 允许用户自定义复合类型,自定义复合类型由多个类型组成,使用时会引入一些deform的开销。 例子 postgres=# create unlogged table t(id int, c1 tp1, c2 int); C...
2262 0
|
SQL 缓存 监控
2.NetDh框架之简单高效的日志操作类(附源码和示例代码)
前言 NetDh框架适用于C/S、B/S的服务端框架,可用于项目开发和学习。目前包含以下四个模块 1.数据库操作层封装Dapper,支持多种数据库类型、多库实例,简单强大; 此部分具体说明可参考博客: https://www.cnblogs.com/michaeldonghan/p/9317078.html 2.提供简单高效的日志操作类使用,支持日志写入Db和txt、支持任何数据库类型写入(包括传统sql数据库和nosql数据库等)、支持同步写入日志和后台独立线程异步处理日志队列; 此部分具体说明可参考博客: 本文以下章节内容。
1294 0