同时,尝试将 .sql 文件导入我的数据库时,其中一个插入语句出现以下错误 -
ERROR 1292 (22007) at line 31504: Incorrect datetime value: '1936-01-31 00:00:00' for column 'BatchDate' at row 1. Operation failed with exitcode 1
我只遇到早于 1980 年的日期的这个错误。它只在我尝试通过导入语句或通过 WorkBench 导入转储时发生。如果我单独执行该语句,它可以正常工作。这是表结构和插入语句
DROP TABLE IF EXISTS `BatchEntry`;
CREATE TABLE `BatchEntry` (
`BatchNo` INTEGER NOT NULL AUTO_INCREMENT,
`BatchDate` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`BTax_ID` DOUBLE NULL DEFAULT 0,
`BPayor_No` DOUBLE NULL DEFAULT 0,
`BBroker_No` DOUBLE NULL DEFAULT 0,
`BHam_Cont` VARCHAR(4),
`BInv_Org_Date` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`BInv_Due_Date` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`BDate_Adv` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`BRec_Amt` DECIMAL(19,4) DEFAULT 0,
`BPaymnt_Com` LONGTEXT,
`BTrans_Count` INTEGER DEFAULT 0,
`BPrefix` VARCHAR(10),
`BStartNumber` INTEGER DEFAULT 0,
`BSuffix` VARCHAR(10),
`BCreated` TINYINT(1) DEFAULT 0,
`BAdvMethod` INTEGER DEFAULT 0,
INDEX (`BPayor_No`),
INDEX (`BTax_ID`),
PRIMARY KEY (`BatchNo`)
) ENGINE=myisam DEFAULT CHARSET=utf8;
INSERT INTO `BatchEntry` (`BatchNo`, `BatchDate`, `BTax_ID`, `BPayor_No`, `BBroker_No`, `BHam_Cont`, `BInv_Org_Date`, `BInv_Due_Date`, `BDate_Adv`, `BRec_Amt`, `BPaymnt_Com`, `BTrans_Count`, `BPrefix`, `BStartNumber`, `BSuffix`, `BCreated`, `BAdvMethod`) VALUES (1396, '1936-01-31 00:00:00', 561986585, 4528, 749, 'BSR', '2005-12-30 00:00:00', '2006-01-30 00:00:00', '2006-01-31 00:00:00', 0, NULL, 14, 'MC', 24850, NULL, 1, 1);
最佳答案
Batchdate 不是 DATETIME 列而是 TIMESTAMP 列。 TIMESTAMP 的范围不包括此日期:
CREATE TABLE `BatchEntry` (
`BatchNo` INTEGER NOT NULL AUTO_INCREMENT,
`BatchDate` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- it's TIMESTAMP
错误信息是
Incorrect datetime value: '1936-01-31 00:00:00'
早于 '1970-01-01 00:00:01',超出数据类型 TIMESTAMP 的范围
The DATE, DATETIME, and TIMESTAMP Types
The TIMESTAMP data type is used for values that contain both date and time parts. TIMESTAMP has a range of '1970-01-01 00:00:01' UTC to '2038-01-19 03:14:07' UTC.
解决方案
将数据类型更改为DATETIME。
CREATE TABLE `BatchEntry` (
`BatchNo` INTEGER NOT NULL AUTO_INCREMENT,
`BatchDate` DATETIME DEFAULT CURRENT_TIMESTAMP,
[...]
如果您使用的是 MySQL 5.6.5 或更新版本,那么您可以将数据类型更改为 DATETIME,因为此版本 DATETIME 也支持自动初始化。您似乎使用了较新的版本,因为您使用的是多个具有自动初始化功能的列。此功能是同时添加的。
Automatic Initialization and Updating for TIMESTAMP and DATETIME
As of MySQL 5.6.5, TIMESTAMP and DATETIME columns can be automatically initializated and updated to the current date and time (that is, the current timestamp). Before 5.6.5, this is true only for TIMESTAMP, and for at most one TIMESTAMP column per table.
注意
对于 1970 年代的日期值,它也适用。
关于MySQL 早于 1980 年的日期时间值不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25250846/
我正在查看instance_variable_set的文档并看到给出的示例代码是这样做的:obj.instance_variable_set(:@instnc_var,"valuefortheinstancevariable")然后允许您在类的任何实例方法中以@instnc_var的形式访问该变量。我想知道为什么在@instnc_var之前需要一个冒号:。冒号有什么作用? 最佳答案 我的第一直觉是告诉你不要使用instance_variable_set除非你真的知道你用它做什么。它本质上是一种元编程工具或绕过实例变量可见性的黑客攻击
我想设置一个默认日期,例如实际日期,我该如何设置?还有如何在组合框中设置默认值顺便问一下,date_field_tag和date_field之间有什么区别? 最佳答案 试试这个:将默认日期作为第二个参数传递。youcorrectlysetthedefaultvalueofcomboboxasshowninyourquestion. 关于ruby-on-rails-date_field_tag,如何设置默认日期?[rails上的ruby],我们在StackOverflow上找到一个类似的问
我需要检查DateTime是否采用有效的ISO8601格式。喜欢:#iso8601?我检查了ruby是否有特定方法,但没有找到。目前我正在使用date.iso8601==date来检查这个。有什么好的方法吗?编辑解释我的环境,并改变问题的范围。因此,我的项目将使用jsapiFullCalendar,这就是我需要iso8601字符串格式的原因。我想知道更好或正确的方法是什么,以正确的格式将日期保存在数据库中,或者让ActiveRecord完成它们的工作并在我需要时间信息时对其进行操作。 最佳答案 我不太明白你的问题。我假设您想检查
我的日期格式如下:"%d-%m-%Y"(例如,今天的日期为07-09-2015),我想看看是不是在过去的七天内。谁能推荐一种方法? 最佳答案 你可以这样做:require"date"Date.today-7 关于ruby-检查日期是否在过去7天内,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/32438063/
这个问题在这里已经有了答案:Railsformattingdate(4个答案)关闭4年前。我想格式化Time.Now函数以显示YYYY-MM-DDHH:MM:SS而不是:“2018-03-0909:47:19+0000”该函数需要放在时间中.现在功能。require‘roo’require‘roo-xls’require‘byebug’file_name=ARGV.first||“Template.xlsx”excel_file=Roo::Spreadsheet.open(“./#{file_name}“,extension::xlsx)xml=Nokogiri::XML::Build
question的一些答案关于redirect_to让我想到了其他一些问题。基本上,我正在使用Rails2.1编写博客应用程序。我一直在尝试自己完成大部分工作(因为我对Rails有所了解),但在需要时会引用Internet上的教程和引用资料。我设法让一个简单的博客正常运行,然后我尝试添加评论。靠我自己,我设法让它进入了可以从script/console添加评论的阶段,但我无法让表单正常工作。我遵循的其中一个教程建议在帖子Controller中创建一个“评论”操作,以添加评论。我的问题是:这是“标准”方式吗?我的另一个问题的答案之一似乎暗示应该有一个CommentsController参
我正在尝试解析一个CSV文件并使用SQL命令自动为其创建一个表。CSV中的第一行给出了列标题。但我需要推断每个列的类型。Ruby中是否有任何函数可以找到每个字段中内容的类型。例如,CSV行:"12012","Test","1233.22","12:21:22","10/10/2009"应该产生像这样的类型['integer','string','float','time','date']谢谢! 最佳答案 require'time'defto_something(str)if(num=Integer(str)rescueFloat(s
我喜欢使用Textile或Markdown为我的项目编写自述文件,但是当我生成RDoc时,自述文件被解释为RDoc并且看起来非常糟糕。有没有办法让RDoc通过RedCloth或BlueCloth而不是它自己的格式化程序运行文件?它可以配置为自动检测文件后缀的格式吗?(例如README.textile通过RedCloth运行,但README.mdown通过BlueCloth运行) 最佳答案 使用YARD直接代替RDoc将允许您包含Textile或Markdown文件,只要它们的文件后缀是合理的。我经常使用类似于以下Rake任务的东西:
我一直致力于让我们的Rails2.3.8应用程序在JRuby下正确运行。一切正常,直到我启用config.threadsafe!以实现JRuby提供的并发性。这导致lib/中的模块和类不再自动加载。使用config.threadsafe!启用:$rubyscript/runner-eproduction'pSim::Sim200Provisioner'/Users/amchale/.rvm/gems/jruby-1.5.1@web-services/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:105:in`co
我需要一些关于TDD概念的帮助。假设我有以下代码defexecute(command)casecommandwhen"c"create_new_characterwhen"i"display_inventoryendenddefcreate_new_character#dostufftocreatenewcharacterenddefdisplay_inventory#dostufftodisplayinventoryend现在我不确定要为什么编写单元测试。如果我为execute方法编写单元测试,那不是几乎涵盖了我对create_new_character和display_invent