禁用MySQL严格模式

时间:2012-06-14 19:40:37

标签: mysql sql

我正在将5000个csv文件扫描到数据库中。令人遗憾的是,文件有'',为0.因此,当我运行我的脚本时,它会崩溃。我听说只要禁用严格模式就可以避免这个错误。所以我试图禁用严格模式,允许我读取空字符串作为我的数字字段的0。但是错误仍然存​​在。

禁用严格模式是否允许将''读入int字段? (''是两个qoutes,即空字符串)

如果是这样,为什么要设置

的sql_mode = ''

my.ini配置文件中的

无法解决问题。

谢谢!

4 个答案:

答案 0 :(得分:17)

我猜您使用LOAD DATA INFILE命令导入CSV文件。在执行此命令之前,请键入:

SET sql_mode = '';

有关各种SQL模式的更多信息,请参阅documentation

答案 1 :(得分:1)

您可以修改LOAD DATA INFILE语句以更正值。这些方面的东西应该有效。

LOAD DATA INFILE 'filepath.csv'
INTO TABLE MyTable(Column1,@Col2,@Col3)
SET Column2=CASE WHEN @Col2 = '' THEN 0 ELSE @Col2 END
,Column3=CASE WHEN @Col3 = '' THEN 0 ELSE @Col3 END;

此查询将值原样导入column1,并修复第2列和第3列的值。使用此功能,您不必禁用严格模式,实际上您可以控制哪些数据进入您的数据库能够以可靠的方式修复它。您还可以使用此功能更改日期格式,或导入十六进制编码的blob值。非常有用的功能。

答案 2 :(得分:1)

我需要这样做,并且正常工作:

  1. 要禁用严格的SQL模式,请以root用户身份登录服务器
  2. 创建此文件: /etc/mysql/conf.d/disable_strict_mode.cnf
  3. 打开文件并输入以下两行:

    的[mysqld] 的sql_mode = IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

  4. 使用以下命令重启MySQL: sudo service mysql restart

答案 3 :(得分:0)

我正在回答这个问题,因为我尚未让代表对您关于设置不是“持有”的后续问题发表评论。我使用MySQL的经验是,配置文件中的设置仅在启动服务器时读取,因此您必须重新启动服务器才能使新设置生效。

服务器是命令行客户端在运行命令时与之通信的守护程序,以便重新启动命令行客户端实际上不会重新启动服务器本身。

本回答提供了更详细的解释:https://serverfault.com/a/79051

相关问题