将十六进制值插入 MySql

Posted

技术标签:

【中文标题】将十六进制值插入 MySql【英文标题】:Insert hex values into MySql 【发布时间】:2011-03-08 18:14:39 【问题描述】:

我有一个包含 VARBINARY 列的表。我需要插入一个字符串,例如“4D2AFF”,它分别代表十六进制值 0x4D、0x2A 和 0xFF。我如何构造这个语句?

【问题讨论】:

【参考方案1】:

您可以使用UNHEX() 函数将带有十六进制对的十六进制字符串转换为二进制,而HEX() 则相反。

INSERT INTO tbl (col) VALUES (UNHEX('4D2AFF'))

SELECT HEX(col) FROM tbl

【讨论】:

【参考方案2】:

或者你甚至可以这样做:

INSERT INTO tbl (col) VALUES (X'4D2AFF')

有关更多信息,请参阅this。

【讨论】:

请注意,即使在 mysql 5.6 中,X'' 表示法在参考 mysql 客户端中也有长度限制,而 UNHEX() 没有(似乎)。我不知道 X'' 的限制是什么,因为它没有正式记录,但我在尝试插入 BLOB 时遇到了它。使用 X'' 字面量,mysql 客户端抛出了一个足够长的十六进制序列的语法错误,而相同序列的 UNHEX() 则没有。【参考方案3】:

已经提到了 Hex() 和 Unhex() 函数,但我也想权衡一下另一种模式。

你如何使用之前和之后的字符串?如果您可以在最后一分钟之前避免覆盖,那是非常优先的。这样您就不会冒出问题的风险,或者忘记您从数据库中提取的对象是否已经被转换。

【讨论】:

【参考方案4】:

这是我经常参考的一篇很棒的博文,以提醒自己正确处理十六进制值和二进制字段,并列出了一些性能影响。

http://www.xaprb.com/blog/2009/02/12/5-ways-to-make-hexadecimal-identifiers-perform-better-on-mysql/

【讨论】:

以上是关于将十六进制值插入 MySql的主要内容,如果未能解决你的问题,请参考以下文章

Spring Test:无法从 import.sql 文件将十六进制值插入 hsqldb

Mysql插入/更新不同的十进制值

java中使用mysql批量插入大文本(二进制)数据时出错

mysql如何把16进制转换成中文字符显示

将AESCipher对象存储在mySQL中

想要将 MySQL 字段的值限制在特定范围内(十进制值)