Я посмотрел исходный код ActiveRecord 2.3.5 (mysql_adapter.rb). Просмотр хэша NATIVE_DATABASE_TYPES показывает, что он не поддерживает тип данных BINARY (16):
NATIVE_DATABASE_TYPES = {
:primary_key => "int(11) DEFAULT NULL auto_increment PRIMARY KEY".freeze,
:string => { :name => "varchar", :limit => 255 },
:text => { :name => "text" },
:integer => { :name => "int", :limit => 4 },
:float => { :name => "float" },
:decimal => { :name => "decimal" },
:datetime => { :name => "datetime" },
:timestamp => { :name => "datetime" },
:time => { :name => "time" },
:date => { :name => "date" },
:binary => { :name => "blob" },
:boolean => { :name => "tinyint", :limit => 1 }
}
Также обратите внимание: двоичный файл - это не то, что вам нужно, потому что он создает столбец BLOB.
Если у вас есть склонность, я бы рекомендовал расширить ActiveRecord для поддержки типа BINARY (16).
Обновление: после некоторых поисков следующий пост в блоге Мэтью Хиггинса кажется многообещающим («Хотя произвольные операторы SQL могут выполняться при переносе, альтернативой является расширение адаптера MySql для поддержки новых типов столбцов».):
http://www.strictlyuntyped.com/2008/07/mysql-lovin-part-2-adding-new-column.html
Если вы заставите это работать, я надеюсь, что вы поделитесь своими мыслями. Как и Мэтью, я бы хотел, чтобы у ActiveRecord был более чистый API для добавления типов столбцов.