我们有一个C#工具,可以根据生产中使用的(MySQL)模式在开发人员计算机上创建(MySQL)模式。此工具在源连接上运行SHOW CREATE TABLE
查询,获取生成的表创建脚本并在本地运行它们。
我在本地使用MySQL 5.7.7社区服务器。
其中一个创建脚本如下所示:
CREATE TABLE `agency` (
`id` int(11) unsigned NOT NULL,
`name` varchar(512) COLLATE utf8_unicode_ci NOT NULL,
`url` varchar(512) CHARACTER SET ascii NOT NULL,
`location_path` varchar(10) CHARACTER SET ascii NOT NULL,
`email_pattern` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`generic_email` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
`address` text COLLATE utf8_unicode_ci,
`zip_code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`city` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`region` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`country` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`phone` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
`inserted_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
当我在MySQL Workbench中运行此查询时,表已成功创建。
但是,当我们的C#工具在目标连接上执行此查询时,会出现以下错误:Failure: Invalid default value for 'inserted_at'
。
我的MySQL Workbench配置了以下SQL_MODE
:TRADITIONAL,ALLOW_INVALID_DATES
。
我的MySQL服务器实例配置了以下sql-mode
:STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
以下是我们的C#工具使用的连接字符串:
本地连接字符串:
Server=localhost;Database=XXX;Uid=XXX;Pwd=XXX;AllowZeroDateTime=true
源连接字符串:
Server=X.X.X.X;Database=XXX;Uid=XXX;Pwd=XXX;Use Compression=true;AllowZeroDateTime=true
任何想法都赞赏!
答案 0 :(得分:1)
看起来在my.ini中从sql-mode中删除select store_id, product_id, start_date, quantity from stock order by product_id
可以解决问题。
这是正确的解决方法吗?