MySQL - 我如何取消一个字段而不是一个字符串?

标签 mysql hex

我有一个包含 varchar(1024) 字段的表,其中包含具有十六进制编码字符串的字符串。此表是自动填充的,我必须提供一个 SP 以允许用户下载它,因此,我需要将十六进制更改回人类可读的形式。

如果我手动运行此语句(从字段中获取十六进制数据),它工作得很好:

SELECT X'5468697320697320612074657374206D6573736167652031323334353637383930';

但是我找不到在调用字段/列名称时让它工作的工作示例。我找到了一些示例,但这些示例仅返回 null 或 0。

我试过 X 和 UnHex() 都没有给我结果。

我哪里错了?

谢谢


编辑:

好吧,在做了更多的测试之后,它似乎首先是它被写入数据库的方式。

这是一个调用 SP 的经典 ASP 页面,SP 会创建数据库条目。在这种方法中,写入数据库有效,我可以在字段中看到 HEX 内容。复制该字段的内容,并将其放入 Select X'123123' 中,可以得到我想要的 ASCII 值。

如果我尝试将其作为 Select,则会失败,返回零或 Null。

SELECT Message_Body_Hex, UNHEX(Message_Body_Hex) FROM messages_inbound

返回:

Message_Body_Hex......unhex(Message_Body_Hex)

417265612032........(NULL)

还是一头雾水! :)

最佳答案

我意识到这是一个老问题,但我今天遇到了同样的问题,并结合使用 HEX 和 CAST 解决了它。使用您的示例,试试这个:
SELECT HEX(CAST(X'5468697320697320612074657374206D6573736167652031323334353637383930' AS CHAR(33)))

从表中提取时,您将替换字段名称:

SELECT HEX(CAST(binary_field AS CHAR(33)))

我已经看到其他建议使用 MAX 代替 33 的答案,但这似乎工作正常。以下是我使用的一些来源:
SQL Server converting varbinary to string

How to convert from varbinary to char/varchar in mysql

关于MySQL - 我如何取消一个字段而不是一个字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15477496/

相关文章:

php - mysqli 查询返回结构而不是数据

mysql - 创建过程 MySQL 错误

python - 如何使用十六进制 Ascii 中特定位数的字符串格式

java - 如何在 Java 中将字节数组转换为十六进制格式

javascript - 如何使用最多 16 个数字/字符的十六进制限制 (16) 将值增加到预定义值? (JavaScript)

sql-server - 选择十六进制/字符转换

Java:将二进制转换为十六进制时出现 NumberFormatException

mysql - group_concat_max_len 在 nodejs 中设置

mySQL 追加到列表

MySQL - 选择最近 5 天内插入的最后数据,跳过几天内丢失的记录