【问题标题】:MySQL 1366 incorrect integer valueMySQL 1366 不正确的整数值
【发布时间】:2019-11-28 16:26:05
【问题描述】:

我正在尝试将 csv 文件导入 MySQL 数据库。 所述csv文件来自同一张表中的select *

LOAD DATA INFILE 'C:/ProgramData/MySQL/MySQL Server 5.7/Uploads/import.csv' 
INTO TABLE fisc_hist_header 
character set utf8
FIELDS TERMINATED BY ';' 
LINES TERMINATED BY '\n'
(-- a whole lot of fields ...)
SET `CREATED_DATE`=STR_TO_DATE( @yourdatecolumn, '%d/%m/%Y %H:%i:%s' )

文件以

开头
545752715002093599;3;1;503955117000124560;28/11/2019 14:38:51;0 -- all the other fields

我得到的是

在这里搜索后,所有结果都是针对

不正确的整数值:'' 对我来说不同和奇怪的是,对我来说,它获取值但不将其作为整数输入?

编辑:这里问的是创建表语句:

CREATE TABLE `fisc_hist_header` (
  `fiscal_idx` bigint(20) NOT NULL AUTO_INCREMENT,
  `invc_sid` bigint(20) NOT NULL,
  `sbs_no` int(11) NOT NULL,
  `store_no` int(5) NOT NULL,
  `workstation_id` bigint(20) NOT NULL,
  `created_date` datetime NOT NULL,
  `invc_type` int(11) NOT NULL,
  `cashier_name` varchar(8) COLLATE utf8_bin DEFAULT NULL,
  `associate_name` varchar(8) COLLATE utf8_bin DEFAULT NULL,
  `store_code` varchar(5) COLLATE utf8_bin DEFAULT NULL,
  `store_name` varchar(40) COLLATE utf8_bin DEFAULT NULL,
  `store_address1` varchar(40) COLLATE utf8_bin DEFAULT NULL,
  `store_address2` varchar(40) COLLATE utf8_bin DEFAULT NULL,
  `store_address3` varchar(40) COLLATE utf8_bin DEFAULT NULL,
  `store_address4` varchar(40) COLLATE utf8_bin DEFAULT NULL,
  `store_address5` varchar(40) COLLATE utf8_bin DEFAULT NULL,
  `store_address6` varchar(40) COLLATE utf8_bin DEFAULT NULL,
  `store_zip` varchar(10) COLLATE utf8_bin DEFAULT NULL,
  `customer_sid` bigint(20) DEFAULT NULL,
  `customer_title` varchar(15) COLLATE utf8_bin DEFAULT NULL,
  `customer_last_name` varchar(30) COLLATE utf8_bin DEFAULT NULL,
  `customer_first_name` varchar(30) COLLATE utf8_bin DEFAULT NULL,
  `customer_address1` varchar(40) COLLATE utf8_bin DEFAULT NULL,
  `customer_address2` varchar(40) COLLATE utf8_bin DEFAULT NULL,
  `customer_address3` varchar(40) COLLATE utf8_bin DEFAULT NULL,
  `customer_address4` varchar(40) COLLATE utf8_bin DEFAULT NULL,
  `customer_zip_code` varchar(10) COLLATE utf8_bin DEFAULT NULL,
  `customer_country` varchar(35) COLLATE utf8_bin DEFAULT NULL,
  `customer_phone` varchar(30) COLLATE utf8_bin DEFAULT NULL,
  `customer_email` varchar(60) COLLATE utf8_bin DEFAULT NULL,
  `item_count` int(5) NOT NULL,
  `grand_total_receipt` decimal(10,0) NOT NULL,
  `prism_version` varchar(19) COLLATE utf8_bin DEFAULT NULL,
  `plugin_version` varchar(19) COLLATE utf8_bin DEFAULT NULL,
  `flag_first_record` char(1) COLLATE utf8_bin DEFAULT NULL,
  `signature_key` varchar(500) COLLATE utf8_bin DEFAULT NULL,
  `signature` varchar(500) COLLATE utf8_bin DEFAULT NULL,
  `signature_previous` varchar(500) COLLATE utf8_bin DEFAULT NULL,
  `signature_short` varchar(10) COLLATE utf8_bin DEFAULT NULL,
  PRIMARY KEY (`fiscal_idx`),
  UNIQUE KEY `un_fhh` (`invc_sid`)
) ENGINE=InnoDB AUTO_INCREMENT=364 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

【问题讨论】:

  • 对于整数来说这是一个非常大的数字列数据类型是什么?

标签: mysql integer mysql-5.7


【解决方案1】:

根据整数值的documentation,可以在INT 列中保存的无符号整数的最大值是4294967295。对于标准有符号整数,它是 2147483647

您的号码545752715002093599 比这两个都大。您需要在fisc_hist_header 表中将目标列声明为BIGINT - 此列类型中带符号整数的最大值为9223372036854775807

存在这些限制是因为 MySQL 用于在数据库中存储每个值的字节数。如果您知道不需要存储超过某个限制的值,则可以使用较小的整数类型以节省磁盘空间和内存。

【讨论】:

  • 你是对的,它对于整数来说太大了。虽然,如果我只输入一个 3 例如它不会更好,而且该字段实际上是表中的一个 bigint(20) (并且数据是从同一个表中导出的,所以我认为问题来自其他地方。 ..
  • 嗯。那么,我们能否看到为该表生成的 CREATE TABLE 语句。
  • 添加到问题编辑中(对于 cmets 来说太大)
  • 奇怪。我做了一个最小的演示:dbfiddle.uk/…,值没有问题。显然我必须使用 INSERT 而不是 LOAD DATA 但关键是这些值是可以接受的。这至少将问题缩小到可能与 LOAD 命令有关。我对那个工具不是很熟悉,但也许其他更专业的人可以提供帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-08
相关资源
最近更新 更多