Я нашел хороший способ хранения некоторых данных в базе данных с двоичной последовательностью, например 0b0101000
, и найти строки, которые дают положительный результат после применения маски.Сохранение/запрос двоичных последовательностей и поиск с помощью масок
Для примера: SELECT (0b0101010 & (1<<3 | 1<<5))>0;
позволяет мне получать строки с 3-м или 5-м битом, независимо от того, включены ли остальные биты.
Проблема в том, когда я хочу сделать это с помощью ActiveRecord. Эта миграция add_column :table, :column, :binary, :limit => 8.bytes
создает фактически столбец TINYBLOB
, а не BINARY
или VARBINARY
, и я не могу применить свою маску к ее значению, потому что она не считается двоичным значением.
Я знаю, что я мог бы сделать правильный формат столбца в процессе миграции, выполнив необработанный SQL-запрос, а затем запросит мою таблицу с необработанными сегментами SQL для этой части, но это не похоже на «Rails Way».
Спасибо за любую идею.
Это был также мой вывод после просмотра исходного кода AR. – jlecour