2

大文字と小文字を区別するように変更するために、既存のMySQL列をからVARCHARに変更したい( https://stackoverflow.com/a/3396315/93995を参照)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
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 に答える