十进制(整数)值不正确:''mySQL

时间:2016-01-27 12:22:57

标签: mysql integer decimal

在mySQL workbench数据库中,其中一个表具有纬度,经度和区域属性

lat:decimal(10,8)

lng:decimal(11,8)

district:int(4)

我正在尝试将.csv文件中的数据导入此表

ERROR 1366: 1366: Incorrect decimal value: '' for column 'lat' at row 1
SQL Statement:
ERROR 1366: 1366: Incorrect integer value: '' for column 'district' at row 1
SQL Statement:
INSERT INTO `db`.`myTable` (`id`, `name_en`, `icon`, `lat`, `lng`, `district`, `city`, `postal_code`)
    VALUES ('686', 'Name',?, '', '', '','1', 'P.O. Box 1111')

2 个答案:

答案 0 :(得分:23)

您启用了严格的sql模式,并尝试将空字符串('')作为插入中的十进制字段的值传递。空字符串是数字字段的无效值,在strict sql mode中如果您尝试将无效数据插入列中,mysql会生成错误,而不是提供警告并使用默认值(数字列为0)特定列的数据类型:

  

严格模式控制MySQL处理无效或缺失值的方式   数据更改语句,如INSERT或UPDATE。值可以是   因几个原因无效。例如,它可能包含错误的数据   列的类型,或者可能超出范围。缺少值   当要插入的新行不包含非NULL值时   在其定义中没有显式DEFAULT子句的列。 (为一个   NULL列,如果缺少值,则插入NULL。)严格模式   也会影响DDL语句,例如CREATE TABLE。

     

如果严格模式无效,MySQL会为其插入调整后的值   值无效或缺失并产生警告(参见章节   13.7.5.40,“显示警告语法”)。在严格模式下,您可以使用INSERT IGNORE或UPDATE IGNORE生成此行为。

在开始导入之前删除会话的严格sql模式:

SET SESSION sql_mode = ''

答案 1 :(得分:0)

global sql_mode中删除 STRICT_TRANS_TABLE 。如果已经设置,则可能需要全局sql_mode中的其他属性,例如 NO_ZERO_DATE

根据您的服务器版本,在my.cnf(或/etc/mysql/mysql.conf.d/mysqld.cnf)的[mysqld]下进行设置。

[mysqld]  
sql_mode = "NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"