我在表格中有整数字段。 POST由复杂的JavaScript发送。他们发送空字符串,如""但是你猜测MySQL并不允许在整数字段中使用emty字符串。是否有允许空字符串的选项?就像它需要空字符串一样,它会将其保存为NULL。
答案 0 :(得分:17)
从my.ini中删除sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
解决了这个问题。
编辑:删除上面的行有效,但这是一个坏主意。它允许有像0000-00-00或空字符串日期之类的东西。最好保持上面的行,不要将空sting插入整数字段,而是将空字符串转换为NULL,然后将NULL插入整数字段。
答案 1 :(得分:11)
有两种方法可以做到这一点。
首先执行查询以获取mysql服务器的当前SQL模式。
mysql> SELECT @@sql_mode;
+----------------------------------------------------------------+
| @@sql_mode |
+----------------------------------------------------------------+
|STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+----------------------------------------------------------------+
1 row in set (0.00 sec)
如果结果包含STRICT_TRANS_TABLES
,则必须删除该值以允许插入查询传递NULL值。确保您的mysql用户有权应用此更改并在应用此项后重新启动Mysql Server。
SET GLOBAL sql_mode = '';
您必须更新my.cnf文件。该文件的位置是:\ etc \ my.cnf或\ etc \ mysql \ mysql.cnf
在[mysqld]下设置一些默认参数,如
[mysqld]
innodb_file_per_table=1
default-storage-engine=MyISAM
performance-schema=0
max_allowed_packet=268435456
open_files_limit=10000
只需在
下添加一行sql-mode=""
确保在更改此文件后重新启动Mysql Server。通常,root用户将是文件的所有者,因此您必须在服务器上以root用户身份登录。
有关详细信息,请了解此SQL模式的用途。
<强> STRICT_TRANS_TABLES 强>
为事务存储引擎启用严格的SQL模式,并在可能的情况下为非事务存储引擎启用。有关详细信息,请参阅严格SQL模式。
参考:http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_strict_trans_tables
<强> NO_AUTO_CREATE_USER 强>
除非指定了身份验证信息,否则防止GRANT语句自动创建新用户帐户(否则会这样做)。该语句必须使用IDENTIFIED BY或使用IDENTIFIED WITH的身份验证插件指定非空密码。
参考:http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_no_auto_create_user
<强> NO_ENGINE_SUBSTITUTION 强>
当CREATE TABLE或ALTER TABLE等语句指定禁用或未编译的存储引擎时,控制默认存储引擎的自动替换。
参考:http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_no_engine_substitution
答案 2 :(得分:4)
假设列允许NULL
值,您必须明确告诉MySQL使用值NULL
,而不是传递空字符串(转换为0
):
INSERT INTO table (column_name) VALUES (NULL);