mysql如何连接/附加二进制数据类型

Posted

技术标签:

【中文标题】mysql如何连接/附加二进制数据类型【英文标题】:mysql how to concat/append binary data type 【发布时间】:2011-03-16 12:39:27 【问题描述】:

我正在尝试编写一个返回 BINARY(20) 类型的存储函数。我想通过在其中放入字符串、itn、浮点值来格式化这个返回值。但我不知道如何附加二进制数据。

CREATE FUNCTION `test`() RETURNS binary(20)
BEGIN
declare v binary(20);

set v:= CAST('test' as binary);
set v := v || cast(5 as binary); -- I would like to append 5 as binary but how?

return v;
END

第一行将 test 写入二进制,在第二行我想将 5 附加为二进制。我怎样才能做到这一点?谢谢大家。。

【问题讨论】:

【参考方案1】:

|| in mysql is logical OR - 你想使用CONCAT:

SET v := CONCAT(v, CAST(5 AS BINARY));

您可以使用简写BINARY 5,而不是CAST(5 AS BINARY)

【讨论】:

我试过了,但是它将 5 转换为 char,我也尝试了数字 659845 而不是 5,它使用 6 字节而不是 4 字节,所以它不是二进制的。 您希望将5 转换为什么? BINARY 的意思是“字节字符串”,所以很自然地将整数5转换为字节字符串'5'。 那么您在解决问题方面取得了进展吗?您是否发现将不同类型打包到 BINARY 字符串中并不是最好的主意? 我确认了这个答案。这里我将两个字符串转换为二进制数据,将它们连接起来,然后将结果转换回字符串:select concat(binary 'x', binary 'y') as binary_return_value, cast(concat(binary 'x', binary 'y') as char) char_return_value;【参考方案2】:

要连接 5 而不是字符 5,请使用 char(5) 而不是 binary 5。 所以:

select concat("test", char(5))

返回一个 5 字节的 blob。您可以通过以下方式验证这一点:

select length(concat("test", char(5))), hex(concat("test", char(5)));

将其填充为 20 字节数组:

select convert(concat("test", char(5)), binary(20));

在你的存储过程中,你只需要:

set v:= concat("test", char(5));

【讨论】:

以上是关于mysql如何连接/附加二进制数据类型的主要内容,如果未能解决你的问题,请参考以下文章

php + mysql 取得数据库中二进制文件,生成链接供打开

php如何打开在mysql中取出的二进制数据

jdbc java数据库连接 11)中大文本类型的处理

附加到列表时,数据类型会以某种方式被转换

Mysql安装与连接

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