我尝试在迁移中一次添加索引到16列:
add_index :billing_invoices, [:due_date, :flat_fee, :percentage_fee, :subtotal,
:processing_fee, :total, :invoice_number, :attn, :street_line_1, :street_line_2,
:city, :state, :zip_code, :is_deactivated, :start_date, :end_date]
但是,我收到了这个错误:
Mysql2 ::错误:指定的密钥太长;最大密钥长度为3072 bytes:CREATE UNIQUE INDEX i ON billing_invoices(due_date,flat_fee, percentage_fee,subtotal,processing_fee,total,invoice_number, attn,street_line_1,street_line_2,city,state,zip_code, is_deactivated,start_date,end_date)
所以,我尝试添加:unique => true, :name => 'indexes_billing_invoices'
,因为它在SO帖子中提出:
add_index :billing_invoices, [:due_date, :flat_fee, :percentage_fee, :subtotal,
:processing_fee, :total, :invoice_number, :attn, :street_line_1, :street_line_2,
:city, :state, :zip_code, :is_deactivated, :start_date, :end_date],
:unique => true, :name => 'indexes_billing_invoices'
但是,它仍然会引发同样的错误。即使我尝试:name => 'i'
来检查,但同样的错误也来了。
答案 0 :(得分:0)
我发现问题是由两个原因引起的:
1>试图将所有列索引在一起。
2 - ;有些列的类型为varchar(255)
。
我的修复
+--------------------+---------------+
| Field | Type |
+--------------------+---------------+
| due_date | datetime |
| flat_fee | decimal(10,2) |
| percentage_fee | decimal(10,2) |
| subtotal | decimal(10,2) |
| processing_fee | decimal(10,2) |
| total | decimal(10,2) |
| invoice_number | varchar(255) |
| attn | varchar(255) |
| street_line_1 | varchar(255) |
| street_line_2 | varchar(255) |
| city | varchar(255) |
| state | varchar(255) |
| zip_code | varchar(255) |
| is_deactivated | tinyint(1) |
| start_date | datetime |
| end_date | datetime |
+--------------------+---------------+
我分别为所有 varchar 列添加了索引,如下所示:
add_index :billing_invoices, [:due_date, :flat_fee, :percentage_fee, :subtotal,
:processing_fee, :total, :is_deactivated, :start_date, :end_date
], unique => true, :name => 'indexes_date_decimal_columns'
add_index :billing_invoices, :invoice_number
add_index :billing_invoices, :attn
add_index :billing_invoices, :street_line_1
add_index :billing_invoices, :street_line_2
add_index :billing_invoices, :city
add_index :billing_invoices, :state
add_index :billing_invoices, :zip_code
它对我有用!!!
我采用了这个修补程序,因为我只想在rails中修复