加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Rails 4迁移:Mysql2 ::错误:列’xxxx’的数

发布时间:2020-12-16 19:29:26 所属栏目:百科 来源:网络整理
导读:这是我的schema.rb create_table "users",force: true do |t| t.string "name",limit: 6 t.string "email" t.datetime "created_at" t.datetime "updated_at" end 我为“name”列设置了字符串限制. 然后,在控制台中: user = User.new(name:"1234567890",ema
这是我的schema.rb
create_table "users",force: true do |t|
    t.string   "name",limit: 6
    t.string   "email"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

我为“name”列设置了字符串限制.

然后,在控制台中:

user = User.new(name:"1234567890",email:"username@gmail.com")
 user.save!

它引发了错误:

ActiveRecord::StatementInvalid: Mysql2::Error: Data too long for column 'name' at row 1: INSERT INTO `users` (`created_at`,`email`,`name`,`updated_at`) VALUES ('2014-06-19 15:08:15','username@gmail.com','1234567890','2014-06-19 15:08:15')

但是,当我切换到rails 3时.

我发现它自动截断了字符串“1234567890”,并将“123456”插入数据库而没有错误.

在轨道4中有什么关于这个被删除了吗?

我应该自己在模型中添加一些截断函数吗?谢谢!

解决方法

您所看到的是MySQL的差异,而不是Rails.默认情况下,MySQL会截断太长的数据,而不是抛出错误.如果将MySQL设置为严格模式,它将抛出错误而不是静默截断数据.

默认情况下,版本4,Rails turns on strict mode.这就是为什么你看到Rails 3的不同行为.这是你可能想要的行为.静默截断数据几乎总是很糟糕,并且可能导致用户非常混乱的行为.

如果您确实要截断数据,可以使用turn off strict mode或使用之前的过滤器:

before_save :truncate_username
def truncate_username
  self.username = username.slice(0,6)
end

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读