У меня есть столбец BINARY (255) в базе данных MySQL, и мне нужно, чтобы он мог хранить двоичные данные точно так же, как я его вставлял.
Если я запустил запрос (таблица UPDATE SET bindata = 0xffff WHERE id = 1), данные появятся с начальным нулем (0ffff0000). Однако, если я добавлю достаточно символов после 0x (102, очевидно?), Начальный нуль исчезает, и вставленное значение отображается правильно.
Почему это происходит, и как я могу остановить его?
Как и в документации mysql по шестнадцатеричным литералам,
Значения, написанные с использованием нотации
0xval
которые содержат нечетное число цифр, рассматриваются как имеющие дополнительное начало 0. Например,0xaaa
интерпретируется как0x0aaa
.
Mysql также поддерживает X'val'
, но при этом возникает синтаксическая ошибка, если в литерале есть нечетное число цифр.
Причина этого ограничения проста:
По умолчанию шестнадцатеричный литерал является двоичной строкой, где каждая пара шестнадцатеричных цифр представляет символ.
Я не знаю никаких способов преодоления этого ограничения. Вы можете захотеть правильно ввести цифры с 0, если у вас есть нечетное количество цифр.