我想将现有的MySQL列从VARCHAR
改为VARCHAR BINARY
,以便将其改为区分大小写(参见:)。
正确的迁移语法是什么?我试过了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
最佳答案
要将单个列更改为区分大小写,需要直接使用SQL DDL将排序规则更改为“utf8_bin”:
def up
execute("ALTER TABLE my_table MODIFY `my_column` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin;")
end
注意,这仍然使用“varchar”类型作为存储,只有排序规则(解释的含义)定义为“binary”用于比较。还要注意,您可能无法比较具有不同排序规则的列,因此请确保这是您真正想要的。
如果要使整个表使用特定的排序规则,可以很容易地做到:
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
关于mysql - 为VARCHAR-> VARCHAR BINARY进行Rails迁移以区分大小写,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14245496/