在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')
答案 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"