• 主页
  • Rails在模式加载时损坏二进制字段默认值

Rails在模式加载时损坏二进制字段默认值

我的schema.rb中的以下条目:

create_table "my_settings", id: :integer, force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
  t.string "IMEI", limit: 25, null: false
  t.binary "enabled", limit: 1, default: "b'0'", null: false
  t.integer "output_channel", default: 1, null: false
  t.binary "inverse_relay", limit: 1, default: "b'0'", null: false
  t.integer "message_syntax", default: 0, null: false
end

rails db:schema:load RAILS_ENV=test期间产生了以下SQL和错误消息,这使得我的测试套件不可用:

ActiveRecord::StatementInvalid: Mysql2::Error: Invalid default value for 'enabled': CREATE TABLE `my_settings` 
(`id` int NOT NULL AUTO_INCREMENT PRIMARY KEY, 
`IMEI` varchar(25) NOT NULL, 
`enabled` varbinary(1) DEFAULT x'62273027' NOT NULL, 
`output_channel` int DEFAULT 1 NOT NULL, 
`inverse_relay` varbinary(1) DEFAULT x'62273027' NOT NULL, 
`message_syntax` int DEFAULT 0 NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=latin1

如您所见,二进制字段的默认值不匹配。你知道为什么rails会破坏这些值吗?我的schema.rb文件是UTF8编码的,以防万一。我在我的Macbook上使用rails 5.1和MySQL5.7.15作为我的测试套件。

在此之前,非常感谢您。

EDIT:根据请求,SHOW CREATE TABLE语句:

CREATE TABLE `my_settings` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `IMEI` varchar(25) NOT NULL,
  `enabled` bit(1) NOT NULL DEFAULT b'0',
  `output_channel` int(11) NOT NULL DEFAULT '1',
  `inverse_relay` bit(1) NOT NULL DEFAULT b'0',
  `message_syntax` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5140 DEFAULT CHARSET=latin1

转载请注明出处:http://www.jubohx.com/article/20230526/2151354.html