Почему MySQL иногда добавляет начальный ноль для столбца BINARY, и как мне его остановить?

0

У меня есть столбец BINARY (255) в базе данных MySQL, и мне нужно, чтобы он мог хранить двоичные данные точно так же, как я его вставлял.

Если я запустил запрос (таблица UPDATE SET bindata = 0xffff WHERE id = 1), данные появятся с начальным нулем (0ffff0000). Однако, если я добавлю достаточно символов после 0x (102, очевидно?), Начальный нуль исчезает, и вставленное значение отображается правильно.

Почему это происходит, и как я могу остановить его?

Теги:
binary

1 ответ

1
Лучший ответ

Как и в документации mysql по шестнадцатеричным литералам,

Значения, написанные с использованием нотации 0xval которые содержат нечетное число цифр, рассматриваются как имеющие дополнительное начало 0. Например, 0xaaa интерпретируется как 0x0aaa.

Mysql также поддерживает X'val', но при этом возникает синтаксическая ошибка, если в литерале есть нечетное число цифр.

Причина этого ограничения проста:

По умолчанию шестнадцатеричный литерал является двоичной строкой, где каждая пара шестнадцатеричных цифр представляет символ.

Я не знаю никаких способов преодоления этого ограничения. Вы можете захотеть правильно ввести цифры с 0, если у вас есть нечетное количество цифр.

  • 0
    Хм ... так, что является самым "естественным" способом вставки данных в двоичный столбец? Я пробовал шестнадцатеричное и base64 - я должен использовать base32 вместо этого?
  • 0
    @ IndigoFenix Извините, но я не понимаю вашего вопроса.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню