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

简介: 本文介绍了如何使用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等编码,都有一定的概率报语法错误。

相关文章
|
存储 搜索推荐 人机交互
Qt鼠标事件全面解析:从基础到实战
Qt鼠标事件全面解析:从基础到实战
2554 0
|
传感器 机器学习/深度学习 算法
基于GA遗传算法的WSN网络节点覆盖优化matlab仿真
本研究应用遗传优化算法于无线传感器网络(WSN),优化节点布局与数量,以最小化节点使用而最大化网络覆盖率。MATLAB2022a环境下,算法通过选择、交叉与变异操作,逐步改进节点配置,最终输出收敛曲线展现覆盖率、节点数及适应度值变化。无线传感器网络覆盖优化问题通过数学建模,结合遗传算法,实现目标区域有效覆盖与网络寿命延长。算法设计中,采用二进制编码表示节点状态,适应度函数考量覆盖率与连通性,通过选择、交叉和变异策略迭代优化,直至满足终止条件。
|
6天前
|
数据采集 人工智能 安全
|
15天前
|
云安全 监控 安全
|
2天前
|
存储 SQL 大数据
删库跑路?别慌!Time Travel 带你穿回昨天的数据世界
删库跑路?别慌!Time Travel 带你穿回昨天的数据世界
243 156
|
9天前
|
SQL 自然语言处理 调度
Agent Skills 的一次工程实践
**本文采用 Agent Skills 实现整体智能体**,开发框架采用 AgentScope,模型使用 **qwen3-max**。Agent Skills 是 Anthropic 新推出的一种有别于mcp server的一种开发方式,用于为 AI **引入可共享的专业技能**。经验封装到**可发现、可复用的能力单元**中,每个技能以文件夹形式存在,包含特定任务的指导性说明(SKILL.md 文件)、脚本代码和资源等 。大模型可以根据需要动态加载这些技能,从而扩展自身的功能。目前不少国内外的一些框架也开始支持此种的开发方式,详细介绍如下。
645 5
|
12天前
|
人工智能 自然语言处理 API
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸
一句话生成拓扑图!next-ai-draw-io 结合 AI 与 Draw.io,通过自然语言秒出架构图,支持私有部署、免费大模型接口,彻底解放生产力,绘图效率直接爆炸。
791 152