2

我想将现有的 MySQL 列从VARCHARtoVARCHAR 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
4

1 回答 1

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' 类型作为存储,只有排序规则(解释的含义)被定义为 '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
于 2013-01-09T20:18:45.590 回答