我想将现有的MySQL列从VARCHAR
更改为VARCHAR BINARY
,以便将其更改为区分大小写(请参阅:https://stackoverflow.com/a/3396315/93995)
适当的迁移语法是什么?我试过了
change_column :my_table, :my_column, :binary, :limit => 255
但是尝试将其更改为blob(255)
。还抱怨:
Mysql2::Error: BLOB/TEXT column 'my_column' used in key specification without a key length: ALTER TABLE `my_table` CHANGE `my_column` `my_column` blob(255) DEFAULT NULL
答案 0 :(得分:4)
要将单个列更改为区分大小写,您需要直接使用SQL DDL将排序规则更改为“utf8_bin”:
def up
execute("ALTER TABLE my_table MODIFY `my_column` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin;")
end
请注意,这仍然使用'varchar'类型作为存储,只有整理(解释的含义)被定义为'二进制'以进行比较。另请注意,您可能无法比较具有不同排序规则的列,因此请确保这是您真正想要的。
如果您想使整个表格使用特定的排序规则,则可以轻松完成:
create_table :my_table, :options => 'ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin' do |t|
t.string :my_column
t.string :my_other_column
end