为什么 MySQL 有时会为 BINARY 列添加一个前导零,我该如何让它停止?

Why does MySQL sometimes add a leading zero for BINARY column, and how do I make it stop?

我在 MySQL 数据库中有一个 BINARY(255) 列,我需要它能够准确地存储我放入的二进制数据。

如果我 运行 查询 (UPDATE table SET bindata = 0xffff WHERE id = 1),数据出现前导零 (0ffff0000)。但是,如果我在 0x 之后添加了足够多的字符(显然是 102?),前导零就会消失并且插入的值会正确显示。

为什么会发生这种情况,如何让它停止?

正如 mysql 关于 hexadecimal literals 的文档所说:

Values written using 0xval notation that contain an odd number of digits are treated as having an extra leading 0. For example, 0xaaa is interpreted as 0x0aaa.

Mysql 也支持 X'val' 表示法,但如果字面量为奇数位数,则会引发语法错误。

这个限制的原因很简单:

By default, a hexadecimal literal is a binary string, where each pair of hexadecimal digits represents a character.

我不知道有什么方法可以克服这个限制。如果您的数字是奇数,您可能需要用 0 向右填充数字。