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

时间:2015-02-19 12:30:11

标签: php mysql

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

3 个答案:

答案 0 :(得分:17)

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

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

答案 1 :(得分:11)

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

  1. 对于当前的Mysql会话(临时解决方案)
  2. 首先执行查询以获取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 = '';
    
    1. Mysql的生命时间(永久解决方案)
    2. 您必须更新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);