У меня есть таблица с двоичным ПК:
CREATE TABLE `codes` (
`Code` binary(45) NOT NULL,
PRIMARY KEY (`Code`),
UNIQUE KEY `Code_UNIQUE` (`Code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Когда я вставляю, я использую BINARY('value')
.
Я попытался получить строку с помощью Code
, используя следующее:
SELECT * from codes WHERE `Code` = BINARY('value')
Это не работает, потому что длина поля Code
равна 45, поэтому MySql дополняет данные пустыми байтами.
Это можно визуализировать, выполнив следующее:
SELECT HEX(Code), HEX(BINARY('value')) FROM codes
Я могу заставить его работать с этим (безобразным) запросом:
SELECT * FROM codes WHERE TRIM('0' from HEX(Code)) = HEX(BINARY('value'))
Так что мне просто интересно, может ли кто-нибудь предоставить хороший и эффективный способ добиться этого. Это просто, если вы знаете размер ваших данных, но поле Code
может быть любой длины.