如何在MySQL中允许空字符串为整数?

ilh*_*han 20 php mysql

我在表中有整数字段.POST由复杂的JavaScript发送.他们发送像""这样的空字符串但是你猜测MySQL不允许在整数字段中使用emty字符串.是否有允许空字符串的选项?就像它需要空字符串一样,它会将其保存为NULL.

ilh*_*han 18

sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"从my.ini中删除已解决了该问题.

编辑:删除上面的行工作,但这是一个坏主意.它允许有像0000-00-00或空字符串日期之类的东西.最好保持上面的行,不要将空的sting插入整数字段,而是将空字符串转换为NULL,然后将NULL插入整数字段.


Mil*_*ani 18

有两种方法可以做到这一点.

  1. 对于当前的Mysql会话(临时解决方案)

首先执行查询以获取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)
Run Code Online (Sandbox Code Playgroud)

如果result包含STRICT_TRANS_TABLES,则必须删除该值以允许insert query传递NULL值.确保您的mysql用户有权应用此更改并在应用此项后重新启动Mysql Server.

    SET GLOBAL sql_mode = '';
Run Code Online (Sandbox Code Playgroud)
  1. 对于Mysql的生命时间(永久解决方案)

你必须更新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
Run Code Online (Sandbox Code Playgroud)

只需在其下添加一行

sql-mode=""
Run Code Online (Sandbox Code Playgroud)

确保在更改此文件后重新启动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


Ben*_*enM 5

假设该列允许NULL值,您必须显式告诉 MySQL 使用值NULL,而不是传递空字符串(被转换为0):

INSERT INTO table (column_name) VALUES (NULL);
Run Code Online (Sandbox Code Playgroud)