MySQL hex字符串首先是低字节

时间:2016-08-28 12:07:05

标签: mysql sql syntax hex

如果我将+--------------------+ | 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()

1 个答案:

答案 0 :(得分:1)

binary实际上不是数值数据类型。它是一种特殊类型的字符串,用于存储文件等二进制数据。与例如charbinary没有字符映射,并且使用数字代码进行了比较。

这种行为类似于其他编程语言如何处理字符串和字节数组,并且在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))

您必须知道(或查询)列的大小,并且您可能会遇到很多问题,从添加两个二进制值的简单任务开始。所以为了简单起见,请使用数字类型。