我有两个具有完全相同模式的表.我可以插入一个表而不是另一个表.失败的人抱怨没有默认值.这是我对表的创建语句
CREATE TABLE `t_product` (
`product_id` varchar(10) NOT NULL,
`prod_name` varchar(150) DEFAULT NULL,
`price` decimal(6,2) NOT NULL,
`prod_date` date NOT NULL,
`prod_meta` varchar(250) DEFAULT NULL,
`prod_key` varchar(250) DEFAULT NULL,
`prod_desc` varchar(150) DEFAULT NULL,
`prod_code` varchar(12) DEFAULT NULL,
`prod_price` decimal(6,2) NOT NULL,
`prod_on_promo` tinyint(1) unsigned NOT NULL,
`prod_promo_sdate` date DEFAULT NULL,
`prod_promo_edate` date DEFAULT NULL,
`prod_promo_price` decimal(6,2) NOT NULL,
`prod_discountable` tinyint(1) unsigned NOT NULL,
`prod_on_hold` tinyint(1) unsigned NOT NULL,
`prod_note` varchar(150) DEFAULT NULL,
`prod_alter` varchar(150) DEFAULT NULL,
`prod_extdesc` text,
`prod_img` varchar(5) NOT NULL,
`prod_min_qty` smallint(6) unsigned NOT NULL,
`prod_recent` tinyint(1) unsigned NOT NULL,
`prod_name_url` varchar(150) NOT NULL,
`upc_code` varchar(50) DEFAULT NULL,
PRIMARY KEY (`product_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
Run Code Online (Sandbox Code Playgroud)
当我在database1中运行此语句时,它成功插入:
insert into t_product (product_id) values ('jlaihello');
Run Code Online (Sandbox Code Playgroud)
当我在database2中运行这个确切的语句时,我收到错误:
ERROR 1364 (HY000): Field 'price' doesn't have a default value
Run Code Online (Sandbox Code Playgroud)
为什么这个错误只发生在database2中?据我所知,database1和database2之间的区别是:
database1使用mysql Ver 14.14 Distrib 5.5.53,debian-linux-gnu(i686)使用readline 6.3
和
database2使用mysql Ver 14.14 Distrib 5.7.16,对于Linux(x86_64)使用EditLine包装器
如何使database2像database1一样?
编辑有数百个表受此影响.基本上我们将数据库移动到新服务器.我从db1做了一个mysqldump,并导入到db2中.t_product只是受此影响的表中的一个.我想避免手动修改数百个表的模式.我更喜欢"简单的开关",它会使db2表现得像db1.
t1f*_*t1f 21
ERROR 1364 (HY000): Field 'price' doesn't have a default value
price decimal(6,2) NOT NULL,
将price设置为null或指定默认值
编辑:
这是由STRICT_TRANS_TABLESSQL模式引起的.
打开phpmyadmin并转到MoreTab并选择Variables子菜单.向下滚动以查找sql模式.编辑sql模式并删除STRICT_TRANS_TABLES保存.
要么
您可以在数据库管理工具中运行SQL查询,例如phpMyAdmin:
-- verify that the mode was previously set:
SELECT @@GLOBAL.sql_mode;
-- update mode:
SET @@GLOBAL.sql_mode= 'YOUR_VALUE';
Run Code Online (Sandbox Code Playgroud)
要么
在mysql conf文件中找到看起来像这样的行:
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
注释上面的行并重新启动mysql服务器
| 归档时间: |
|
| 查看次数: |
12885 次 |
| 最近记录: |