【发布时间】:2019-05-26 02:18:06
【问题描述】:
我有带有 87 db 列的表的 rails 模型,但是当我尝试添加任何额外的 db 列时,它失败了
ArbitaryDatum.columns.count
=> 87
ArbitaryDatum.table_name
=> "arbitary_data"
ActiveRecord::Migration.add_column :arbitary_data, :attr51, :string
-- add_column(:arbitary_data, :attr51, :string)
(1.4ms) ALTER TABLE `arbitary_data` ADD `attr51` varchar(255)
Mysql2::Error: Specified key was too long; max key length is 767 bytes: ALTER TABLE `arbitary_data` ADD `attr51` varchar(255)
ActiveRecord::StatementInvalid: Mysql2::Error: Specified key was too long; max key length is 767 bytes: ALTER TABLE `arbitary_data` ADD `attr51` varchar(255)
我检查了我使用的是哪个 mysql 版本,
mysql --version
mysql Ver 14.14 Distrib 5.5.62, for debian-linux-gnu (i686) using readline 6.3
我不明白为什么它不允许添加额外的表格列
问。为什么我没有收到Mysql2::Error: Specified key was too long
【问题讨论】:
-
我认为您真正的问题是您有一个包含 87 列的表,特别是如果它们的名称类似于
attr51。您可能想重新审视您的数据库设计。 -
@muistooshort 请告诉我“重新访问数据库设计”是什么意思。你的意思是表模式吗?该特定表的 87 列中有 50 列命名为“attr1”到“attr2”。
-
是的,架构。一个有 87 列的表,名字像这样闻起来很糟糕。表太宽,列太多。比如说,
attr23是什么意思? -
data属于structure结构知道哪个 attr 持有什么!我们的客户将决定哪个 attr 保存什么,他定义了结构,它定义了 50 个带有序列化哈希的 attr db 字段,这些字段有键来告诉它应该有什么名称它应该有什么类型! ****现有**** -
@muistooshort Now 改变现有的 3 年以上运行良好的字段真的很难,所以我只想简单地添加 30 个字段,但不能添加一个属性
标签: mysql ruby-on-rails ruby ruby-on-rails-4 activerecord