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 — быстрые и компактные двоичные строки. Выбирайте правильный размер, индексируйте префиксами и храните крупные объекты вне БД.