6

Rails マイグレーションを実行しようとすると、「BLOB/TEXT column used in key specification without a key length」というエラーが表示されます...ただし、マイグレーション クラスで長さを指定しています。Rails は、移行から SQL ステートメントを生成するときにこれを無視しているようです。手がかりはありますか?

これが私の移行クラスです:

class AddIndexToAccounts < ActiveRecord::Migration
def self.up
  add_index :TACCOUNT, :NAMEX, :length => 5
end
def self.down
  remove_index :TACCOUNT, :NAMEX
end
end

そして、ここにエラー出力があります。長さの指定を見たようですが、それが生成する SQL ステートメントには存在しません。

** [out :: 192.168.10.7] -- add_index(:TACCOUNT, :NAMEX, {:length=>5})
** [out :: 192.168.10.7] rake aborted!
** [out :: 192.168.10.7] An error has occurred, all later migrations canceled:
** [out :: 192.168.10.7] 
** [out :: 192.168.10.7] Mysql::Error: BLOB/TEXT column 'NAMEX' used in key specification without a key length: CREATE  INDEX `index_TACCOUNT_on_NAMEX` ON `TACCOUNT` (`NAMEX`)
4

1 に答える 1

13

より具体的にして、それが機能するようになるかどうかを確認できます。

add_index :TACCOUNT, :NAMEX, :length => { :NAMEX => 5 }

ADD INDEX最後の手段として、間違ったステートメントを調整して正しいステートメントを使用することにより、SQL を直接使用して「難しい方法」でインデックスを作成できますexecute

于 2012-04-10T22:21:12.590 に答える