如果超过 24 小时,Mysql "Time"类型在 Rails 中给出 "ArgumentError: argument out of range"

标签 mysql ruby-on-rails datetime time types

我正在一个遗留的 mysql 数据库之上编写一个 Rails 应用程序,它还提供一个 PHP 生产工具。由于此设置,我无法更改数据库结构。

我遇到的问题是,只要时间在 24:00:00 以下,两个表都有一个“时间”属性(持续时间),rails 会处理这个问题,但一旦 rails 遇到 39:00 之类的东西:34 我得到这个“ArgumentError:参数超出范围”。

我研究了这个问题并了解了 rails 如何处理时间类型,据我所知,它将它视为日期时间,因此 39:00:34 的值会引发此错误。

我需要某种映射/或更改类型转换的方法,这样我就不会收到此错误。将值作为字符串读取也可以。

任何想法将不胜感激。 干杯

最佳答案

我不熟悉 Rails,所以可以有一个干净的本地解决方案,但如果所有其他方法都失败了,一个解决方法可能是写入 VARCHAR 字段,然后运行第二个查询将其复制到 TIME mySQL 中的字段:

INSERT INTO tablename (name, stringfield) 
VALUES ("My Record", "999:02:02");

UPDATE tablename SET datefield = CAST(stringfield as TIME) 
WHERE id = LAST_INSERT_ID();

关于如果超过 24 小时,Mysql "Time"类型在 Rails 中给出 "ArgumentError: argument out of range",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4076248/

相关文章:

mysql - vb.net组合框仅显示1条记录

mysql - 为共享相同列值的每个表条目选择最小整数值(非唯一)

ruby-on-rails - 数字字段溢出 - 到底是哪个字段?

ruby-on-rails - 在 link_to 调用中嵌入额外的 HTML

c# - 从 DataReader 访问 DateTime 字段时出现 MySqlConversionException

mysql - 如何从一个表中选择第二个表中不存在的记录

ruby-on-rails - 简单的形式将类添加到周围的 div

ruby-on-rails - rails 3.1 : Querying Postgres for records within a time range

c# - 无论本地时区如何,获取另一个时区的日期时间

mysql - 通过具有 : SQLite vs MySQL 进行分组