BINARY в MySQL — 100 практических примеров для двоичных данных

100 приёмов BINARY/VARBINARY: хеши, UUID, токены, файлы, сигнатуры, индексы, безопасность.

🟢 BINARY в MySQL. Введение

BINARY и VARBINARY — двоичные строки для хешей, токенов, UUID и мини‑объектов. Ниже — синтаксис, типовой шаблон и 100 уникальных примеров.

Синтаксис

CREATE TABLE files (
  id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
  checksum BINARY(32) NOT NULL,
  data VARBINARY(65535)
);
ALTER TABLE users
ADD COLUMN password_hash BINARY(32) NOT NULL;
SELECT id, HEX(checksum) AS sha256
FROM files
WHERE checksum = UNHEX('A1B2C3...');
INSERT INTO api_keys (id, token)
VALUES (1, UNHEX('4D79546F6B656E'));

Типовая конструкция

CREATE TABLE auth_tokens (
  token_id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
  token BINARY(32) NOT NULL,
  user_id BIGINT UNSIGNED NOT NULL,
  created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  INDEX (user_id)
);

100 примеров

SHA‑256 в BINARY(32)

Фиксированная длина ускоряет сравнение.

CREATE TABLE blobs_sha (
  id BIGINT PRIMARY KEY AUTO_INCREMENT,
  sha256 BINARY(32) NOT NULL
);

Сравнение через UNHEX

Сравнение происходит по байтам.

SELECT id
FROM blobs_sha
WHERE sha256 = UNHEX('9F2C...');

UUID в BINARY(16)

Храним без дефисов, 16 байт.

CREATE TABLE users_uuid (
  id BINARY(16) PRIMARY KEY,
  email VARCHAR(255) NOT NULL
);

Строковый UUID → BINARY(16)

Преобразование при INSERT.

INSERT INTO users_uuid (id, email)
VALUES (UNHEX(REPLACE('550e8400-e29b-41d4-a716-446655440000','-','')), 'u@sqller.com');

BINARY(16) → UUID

Вывод UUID в текст.

SELECT CONCAT_WS('-', HEX(SUBSTR(id,1,4)), HEX(SUBSTR(id,5,2)), HEX(SUBSTR(id,7,2)), HEX(SUBSTR(id,9,2)), HEX(SUBSTR(id,11))) AS uuid
FROM users_uuid;

Флаги версии UUID

Фильтр по байту версии.

SELECT id
FROM users_uuid
WHERE SUBSTR(id,7,1) BETWEEN x'40' AND x'4F';

Ключи API в BINARY(32)

Держим ключи в бинарном виде.

CREATE TABLE api_keys (
  id BIGINT PRIMARY KEY AUTO_INCREMENT,
  token BINARY(32) NOT NULL UNIQUE
);

Индекс по токену

Ускоряем точное сравнение.

CREATE INDEX ix_api_token
ON api_keys (token);

Хеш пароля как BINARY

Соль и хеш в бинарном виде.

CREATE TABLE user_pass (
  uid BIGINT PRIMARY KEY,
  salt BINARY(16) NOT NULL,
  pass_hash BINARY(32) NOT NULL
);

HEX‑вид для логов

Выводим HEX при необходимости.

SELECT HEX(token) AS token_hex
FROM api_keys
WHERE id=1;

JPEG сигнатура 11

Начало файла FF D8.

SELECT id
FROM files
WHERE SUBSTR(data,1,2)=0xFFD8;

ZIP сигнатура 12

Архив 50 4B 03 04.

SELECT id
FROM files
WHERE SUBSTR(data,1,4)=0x504B0304;

SUBSTR по бинарю 13

Читаем часть байтов.

SELECT SUBSTR(data,101,64) AS chunk
FROM files
WHERE id=1;

Обрезка до длины 14

SUBSTR для усечения.

UPDATE files
SET data = SUBSTR(data,1,4096)
WHERE id=1;

HEX/UNHEX нормализация 15

Исправляем формат.

UPDATE files
SET data = UNHEX(HEX(data))
WHERE id=1;

BASE64 импорт 16

FROM_BASE64 → VARBINARY.

INSERT INTO files (checksum, data)
VALUES (RANDOM_BYTES(32), FROM_BASE64('iVBORw0KGgo='));

BASE64 экспорт 17

TO_BASE64 для API.

SELECT TO_BASE64(data) AS b64
FROM files
WHERE id=1;

Префиксный индекс 18

Индекс по SUBSTR().

CREATE INDEX ix_files_pref
ON files ((SUBSTR(data,1,16)));

CRC32 контроль 19

Быстрая проверка целостности.

SELECT CRC32(data) AS crc
FROM files
WHERE id=1;

PNG сигнатура 20

Проверяем 0x89504E47.

SELECT id
FROM files
WHERE SUBSTR(data,1,4)=0x89504E47;

JPEG сигнатура 21

Начало файла FF D8.

SELECT id
FROM files
WHERE SUBSTR(data,1,2)=0xFFD8;

ZIP сигнатура 22

Архив 50 4B 03 04.

SELECT id
FROM files
WHERE SUBSTR(data,1,4)=0x504B0304;

SUBSTR по бинарю 23

Читаем часть байтов.

SELECT SUBSTR(data,101,64) AS chunk
FROM files
WHERE id=1;

Обрезка до длины 24

SUBSTR для усечения.

UPDATE files
SET data = SUBSTR(data,1,4096)
WHERE id=1;

HEX/UNHEX нормализация 25

Исправляем формат.

UPDATE files
SET data = UNHEX(HEX(data))
WHERE id=1;

BASE64 импорт 26

FROM_BASE64 → VARBINARY.

INSERT INTO files (checksum, data)
VALUES (RANDOM_BYTES(32), FROM_BASE64('iVBORw0KGgo='));

BASE64 экспорт 27

TO_BASE64 для API.

SELECT TO_BASE64(data) AS b64
FROM files
WHERE id=1;

Префиксный индекс 28

Индекс по SUBSTR().

CREATE INDEX ix_files_pref
ON files ((SUBSTR(data,1,16)));

CRC32 контроль 29

Быстрая проверка целостности.

SELECT CRC32(data) AS crc
FROM files
WHERE id=1;

PNG сигнатура 30

Проверяем 0x89504E47.

SELECT id
FROM files
WHERE SUBSTR(data,1,4)=0x89504E47;

JPEG сигнатура 31

Начало файла FF D8.

SELECT id
FROM files
WHERE SUBSTR(data,1,2)=0xFFD8;

ZIP сигнатура 32

Архив 50 4B 03 04.

SELECT id
FROM files
WHERE SUBSTR(data,1,4)=0x504B0304;

SUBSTR по бинарю 33

Читаем часть байтов.

SELECT SUBSTR(data,101,64) AS chunk
FROM files
WHERE id=1;

Обрезка до длины 34

SUBSTR для усечения.

UPDATE files
SET data = SUBSTR(data,1,4096)
WHERE id=1;

HEX/UNHEX нормализация 35

Исправляем формат.

UPDATE files
SET data = UNHEX(HEX(data))
WHERE id=1;

BASE64 импорт 36

FROM_BASE64 → VARBINARY.

INSERT INTO files (checksum, data)
VALUES (RANDOM_BYTES(32), FROM_BASE64('iVBORw0KGgo='));

BASE64 экспорт 37

TO_BASE64 для API.

SELECT TO_BASE64(data) AS b64
FROM files
WHERE id=1;

Префиксный индекс 38

Индекс по SUBSTR().

CREATE INDEX ix_files_pref
ON files ((SUBSTR(data,1,16)));

CRC32 контроль 39

Быстрая проверка целостности.

SELECT CRC32(data) AS crc
FROM files
WHERE id=1;

PNG сигнатура 40

Проверяем 0x89504E47.

SELECT id
FROM files
WHERE SUBSTR(data,1,4)=0x89504E47;

JPEG сигнатура 41

Начало файла FF D8.

SELECT id
FROM files
WHERE SUBSTR(data,1,2)=0xFFD8;

ZIP сигнатура 42

Архив 50 4B 03 04.

SELECT id
FROM files
WHERE SUBSTR(data,1,4)=0x504B0304;

SUBSTR по бинарю 43

Читаем часть байтов.

SELECT SUBSTR(data,101,64) AS chunk
FROM files
WHERE id=1;

Обрезка до длины 44

SUBSTR для усечения.

UPDATE files
SET data = SUBSTR(data,1,4096)
WHERE id=1;

HEX/UNHEX нормализация 45

Исправляем формат.

UPDATE files
SET data = UNHEX(HEX(data))
WHERE id=1;

BASE64 импорт 46

FROM_BASE64 → VARBINARY.

INSERT INTO files (checksum, data)
VALUES (RANDOM_BYTES(32), FROM_BASE64('iVBORw0KGgo='));

BASE64 экспорт 47

TO_BASE64 для API.

SELECT TO_BASE64(data) AS b64
FROM files
WHERE id=1;

Префиксный индекс 48

Индекс по SUBSTR().

CREATE INDEX ix_files_pref
ON files ((SUBSTR(data,1,16)));

CRC32 контроль 49

Быстрая проверка целостности.

SELECT CRC32(data) AS crc
FROM files
WHERE id=1;

PNG сигнатура 50

Проверяем 0x89504E47.

SELECT id
FROM files
WHERE SUBSTR(data,1,4)=0x89504E47;

JPEG сигнатура 51

Начало файла FF D8.

SELECT id
FROM files
WHERE SUBSTR(data,1,2)=0xFFD8;

ZIP сигнатура 52

Архив 50 4B 03 04.

SELECT id
FROM files
WHERE SUBSTR(data,1,4)=0x504B0304;

SUBSTR по бинарю 53

Читаем часть байтов.

SELECT SUBSTR(data,101,64) AS chunk
FROM files
WHERE id=1;

Обрезка до длины 54

SUBSTR для усечения.

UPDATE files
SET data = SUBSTR(data,1,4096)
WHERE id=1;

HEX/UNHEX нормализация 55

Исправляем формат.

UPDATE files
SET data = UNHEX(HEX(data))
WHERE id=1;

BASE64 импорт 56

FROM_BASE64 → VARBINARY.

INSERT INTO files (checksum, data)
VALUES (RANDOM_BYTES(32), FROM_BASE64('iVBORw0KGgo='));

BASE64 экспорт 57

TO_BASE64 для API.

SELECT TO_BASE64(data) AS b64
FROM files
WHERE id=1;

Префиксный индекс 58

Индекс по SUBSTR().

CREATE INDEX ix_files_pref
ON files ((SUBSTR(data,1,16)));

CRC32 контроль 59

Быстрая проверка целостности.

SELECT CRC32(data) AS crc
FROM files
WHERE id=1;

PNG сигнатура 60

Проверяем 0x89504E47.

SELECT id
FROM files
WHERE SUBSTR(data,1,4)=0x89504E47;

JPEG сигнатура 61

Начало файла FF D8.

SELECT id
FROM files
WHERE SUBSTR(data,1,2)=0xFFD8;

ZIP сигнатура 62

Архив 50 4B 03 04.

SELECT id
FROM files
WHERE SUBSTR(data,1,4)=0x504B0304;

SUBSTR по бинарю 63

Читаем часть байтов.

SELECT SUBSTR(data,101,64) AS chunk
FROM files
WHERE id=1;

Обрезка до длины 64

SUBSTR для усечения.

UPDATE files
SET data = SUBSTR(data,1,4096)
WHERE id=1;

HEX/UNHEX нормализация 65

Исправляем формат.

UPDATE files
SET data = UNHEX(HEX(data))
WHERE id=1;

BASE64 импорт 66

FROM_BASE64 → VARBINARY.

INSERT INTO files (checksum, data)
VALUES (RANDOM_BYTES(32), FROM_BASE64('iVBORw0KGgo='));

BASE64 экспорт 67

TO_BASE64 для API.

SELECT TO_BASE64(data) AS b64
FROM files
WHERE id=1;

Префиксный индекс 68

Индекс по SUBSTR().

CREATE INDEX ix_files_pref
ON files ((SUBSTR(data,1,16)));

CRC32 контроль 69

Быстрая проверка целостности.

SELECT CRC32(data) AS crc
FROM files
WHERE id=1;

PNG сигнатура 70

Проверяем 0x89504E47.

SELECT id
FROM files
WHERE SUBSTR(data,1,4)=0x89504E47;

JPEG сигнатура 71

Начало файла FF D8.

SELECT id
FROM files
WHERE SUBSTR(data,1,2)=0xFFD8;

ZIP сигнатура 72

Архив 50 4B 03 04.

SELECT id
FROM files
WHERE SUBSTR(data,1,4)=0x504B0304;

SUBSTR по бинарю 73

Читаем часть байтов.

SELECT SUBSTR(data,101,64) AS chunk
FROM files
WHERE id=1;

Обрезка до длины 74

SUBSTR для усечения.

UPDATE files
SET data = SUBSTR(data,1,4096)
WHERE id=1;

HEX/UNHEX нормализация 75

Исправляем формат.

UPDATE files
SET data = UNHEX(HEX(data))
WHERE id=1;

BASE64 импорт 76

FROM_BASE64 → VARBINARY.

INSERT INTO files (checksum, data)
VALUES (RANDOM_BYTES(32), FROM_BASE64('iVBORw0KGgo='));

BASE64 экспорт 77

TO_BASE64 для API.

SELECT TO_BASE64(data) AS b64
FROM files
WHERE id=1;

Префиксный индекс 78

Индекс по SUBSTR().

CREATE INDEX ix_files_pref
ON files ((SUBSTR(data,1,16)));

CRC32 контроль 79

Быстрая проверка целостности.

SELECT CRC32(data) AS crc
FROM files
WHERE id=1;

PNG сигнатура 80

Проверяем 0x89504E47.

SELECT id
FROM files
WHERE SUBSTR(data,1,4)=0x89504E47;

JPEG сигнатура 81

Начало файла FF D8.

SELECT id
FROM files
WHERE SUBSTR(data,1,2)=0xFFD8;

ZIP сигнатура 82

Архив 50 4B 03 04.

SELECT id
FROM files
WHERE SUBSTR(data,1,4)=0x504B0304;

SUBSTR по бинарю 83

Читаем часть байтов.

SELECT SUBSTR(data,101,64) AS chunk
FROM files
WHERE id=1;

Обрезка до длины 84

SUBSTR для усечения.

UPDATE files
SET data = SUBSTR(data,1,4096)
WHERE id=1;

HEX/UNHEX нормализация 85

Исправляем формат.

UPDATE files
SET data = UNHEX(HEX(data))
WHERE id=1;

BASE64 импорт 86

FROM_BASE64 → VARBINARY.

INSERT INTO files (checksum, data)
VALUES (RANDOM_BYTES(32), FROM_BASE64('iVBORw0KGgo='));

BASE64 экспорт 87

TO_BASE64 для API.

SELECT TO_BASE64(data) AS b64
FROM files
WHERE id=1;

Префиксный индекс 88

Индекс по SUBSTR().

CREATE INDEX ix_files_pref
ON files ((SUBSTR(data,1,16)));

CRC32 контроль 89

Быстрая проверка целостности.

SELECT CRC32(data) AS crc
FROM files
WHERE id=1;

PNG сигнатура 90

Проверяем 0x89504E47.

SELECT id
FROM files
WHERE SUBSTR(data,1,4)=0x89504E47;

JPEG сигнатура 91

Начало файла FF D8.

SELECT id
FROM files
WHERE SUBSTR(data,1,2)=0xFFD8;

ZIP сигнатура 92

Архив 50 4B 03 04.

SELECT id
FROM files
WHERE SUBSTR(data,1,4)=0x504B0304;

SUBSTR по бинарю 93

Читаем часть байтов.

SELECT SUBSTR(data,101,64) AS chunk
FROM files
WHERE id=1;

Обрезка до длины 94

SUBSTR для усечения.

UPDATE files
SET data = SUBSTR(data,1,4096)
WHERE id=1;

HEX/UNHEX нормализация 95

Исправляем формат.

UPDATE files
SET data = UNHEX(HEX(data))
WHERE id=1;

BASE64 импорт 96

FROM_BASE64 → VARBINARY.

INSERT INTO files (checksum, data)
VALUES (RANDOM_BYTES(32), FROM_BASE64('iVBORw0KGgo='));

BASE64 экспорт 97

TO_BASE64 для API.

SELECT TO_BASE64(data) AS b64
FROM files
WHERE id=1;

Префиксный индекс 98

Индекс по SUBSTR().

CREATE INDEX ix_files_pref
ON files ((SUBSTR(data,1,16)));

CRC32 контроль 99

Быстрая проверка целостности.

SELECT CRC32(data) AS crc
FROM files
WHERE id=1;

PNG сигнатура 100

Проверяем 0x89504E47.

SELECT id
FROM files
WHERE SUBSTR(data,1,4)=0x89504E47;

Типичные ошибки и советы по BINARY в MySQL.

  • Размер: фиксированное храните в BINARY, переменное — в VARBINARY.
  • Индексы: используйте префиксные индексы по SUBSTR для больших полей.
  • HEX/UNHEX: храните бинарь, а HEX выводите только при экспорте.
  • Файлы: крупные объёмы — во внешнем хранилище; в БД — ключ и хеш.
  • Безопасность: проверяйте сигнатуры и размер до INSERT, ведите аудит изменений.

См. также

BINARY в MySQL. Заключение

BINARY/VARBINARY — быстрые и компактные двоичные строки. Выбирайте правильный размер, индексируйте префиксами и храните крупные объекты вне БД.


 

Понравилась статья? Поделиться с друзьями: