我的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