在mySQL workbench数据库中,其中一个表具有纬度、经度和地区属性
lat:十进制(10,8)
lng:十进制(11,8)
地区: 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')发布于 2016-01-27 20:40:28
您启用了strict sql模式,并尝试将一个空字符串('')作为insert中的十进制字段的值传递。空字符串是数值字段的无效值,如果您尝试将无效数据插入到列中,而不是提供警告并使用特定列的数据类型的默认值(0表示数值列),则strict sql mode中的mysql会生成错误:
严格模式控制MySQL如何处理INSERT或UPDATE等数据更改语句中的无效值或缺失值。由于多种原因,值可能是无效的。例如,它可能具有错误的列数据类型,或者它可能超出范围。如果要插入的新行不包含在其定义中没有显式DEFAULT子句的非空列的值,则缺少值。(对于NULL列,如果缺少值,则插入NULL。)严格模式还会影响CREATE TABLE等DDL语句。
如果严格模式不起作用,MySQL会为无效或缺少的值插入调整后的值,并生成警告(参见13.7.5.40节,“显示警告语法”)。在严格模式下,可以使用INSERT IGNORE或UPDATE IGNORE产生此行为。
在开始导入之前,删除会话的严格sql模式:
SET SESSION sql_mode = ''发布于 2019-11-01 00:18:04
从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"发布于 2021-10-24 21:53:38
我所做的就是将我的查询从INSERT INTO...更改为INSERT IGNORE INTO...。
https://stackoverflow.com/questions/35037288
复制相似问题