我在 PHP 中有以下 mysql 查询,它工作正常。
$strUpdate = "INSERT INTO `batchfolder`.`newbatch` (`BatchID` ,`Batch` ,`barcode` ,`PG`)VALUES (NULL , '', '1', '')";
当我直接在数据库中运行它时也很好。
但是当我在 java 中运行它时,
try {
conn = DriverManager.getConnection (url, userName, password);
Statement st = conn.createStatement();
st.execute("INSERT INTO `batchfolder`.`newbatch` (`BatchID` ,`Batch` ,`barcode` ,`PG`)VALUES (NULL , '', '1', '')");
st.close();
}
它给出了以下错误。
Exception in thread "main" java.sql.SQLException: Field 'Pre' doesn't have a default value
Pre 是数据库中的下一行,它没有默认值。
我的问题是,这个查询如何在 mysql 和 php 中正常运行。
P.S BatchID 是新批处理中的 int(10) 自动递增
值。
这是我的表结构。
CREATE TABLE IF NOT EXISTS `newbatch` (
`BatchID` int(10) NOT NULL AUTO_INCREMENT,
`Batch` varchar(100) NOT NULL,
`barcode` varchar(5) NOT NULL,
`Ly` varchar(5) NOT NULL DEFAULT '0',
`PG` varchar(5) NOT NULL,
`Pre` varchar(5) NOT NULL,
`Flu` varchar(5) NOT NULL,
`FluID` varchar(100) DEFAULT NULL,
`DateCreated` varchar(100) DEFAULT NULL,
`Comments` varchar(500) DEFAULT NULL,
PRIMARY KEY (`BatchID`),
UNIQUE KEY `FluID` (`FluID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1000160 ;
最佳答案
您绝对确定这确实在 PHP 中运行吗?您可能只是没有看到错误消息。
再试一次 display_errors = 'on'
和 error_reporting(E_ALL | E_STRICT);
这是一个 SQL 错误,它不依赖于驱动程序。驱动程序只是向您显示消息。
更新: 看起来 Java 出于某种原因正在关闭 MySQL 的严格模式。唯一(据我所知)应该能够导致这种行为的是 MySQL 严格模式被关闭。
If strict mode is not enabled, MySQL sets the column to the implicit default value for the column data type.
您可以通过SELECT @@GLOBAL.sql_mode;
检查您的服务器运行的模式。在 Java 和 PHP 中尝试。如果结果不同,那就是你的答案。
更新 2: Jep!
关于java - 查询在 mysql 和 php 中运行良好,但在 java 中运行不正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10842451/