将十六进制值插入 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的主要内容,如果未能解决你的问题,请参考以下文章