如果我将+--------------------+
| HEX(binary_column) |
+--------------------+
| FF00 |
+--------------------+
插入二进制列,MySql(5.7)会假设这些是高字节。
e.g。如果列是BINARY(2):
#include "ppapi/cpp/instance.h"
#include "ppapi/cpp/module.h"
#include "ppapi/cpp/var_array.h"
#include "ppapi/cpp/var.h"
namespace {
// The expected string sent by the browser.
const char* const kHelloString = "hello";
// The string sent back to the browser upon receipt of a message
// containing "hello".
const char* const kReplyString = "hello from NaCl";
} // namespace
class job1Instance : public pp::Instance {
public:
explicit job1Instance(PP_Instance instance): pp::Instance(instance) {}
virtual ~job1Instance() {}
virtual void HandleMessage(const pp::Var& message) {
if (!message.is_string()) {
return;
}
std::string message_txt = message.AsString();
pp::Var reply;
if (message_txt == kHelloString) {
reply = pp::Var(kReplyString);
PostMessage(kReplyString);
}
}
};
class job1 : public pp::Module {
public:
job1() : pp::Module() {}
virtual ~job1() {}
virtual pp::Instance* CreateInstance(PP_Instance instance) {
return new job1Instance(instance);
}
};
namespace pp {
Module* CreateModule() {
return new job1();
}
} // namespace pp
为方便起见,您如何让MySql正常解释十六进制字符串?
P.S。还试过UNHEX()
答案 0 :(得分:1)
binary
实际上不是数值数据类型。它是一种特殊类型的字符串,用于存储文件等二进制数据。与例如char
,binary
没有字符映射,并且使用数字代码进行了比较。
这种行为类似于其他编程语言如何处理字符串和字节数组,并且在mysql中也是如此,请参阅The BINARY and VARBINARY Type:
当存储BINARY值时,它们用填充值右填充到指定的长度。填充值为0x00(零字节)。在插入时右侧填充0x00,并且在select时不删除尾随字节。所有字节在比较中都很重要,包括ORDER BY和DISTINCT操作。 0x00字节和空格在比较中是不同的,其中0x00<空间。
您似乎在寻找二进制数字,因此您可能希望使用数字类型。你可以用例如int
(或bit(16)
)并且仍会插入0xFF
之类的值(仅在不进一步投射的情况下不会'0xFF'
),您仍然可以使用例如hex(0xFF)
以你想要的方式。
如果你想使用二进制值(或需要大值> 8字节),你可以使用lpad用前导零填充它们,例如
select hex(lpad(0xFF,2,0x0))
您必须知道(或查询)列的大小,并且您可能会遇到很多问题,从添加两个二进制值的简单任务开始。所以为了简单起见,请使用数字类型。