【问题标题】:SQL Error [1054] [42S22]: Unknown column ' ' in 'field list'SQL 错误 [1054] [42S22]: '字段列表' 中的未知列 ' '
【发布时间】:2018-03-31 01:35:27
【问题描述】:

这个错误已经让我发疯了好几天了

这是一个 1000+ 行文件中的大约 10 行,不会导入到我的表中。

我尝试在插入语句中添加所有列,我尝试删除列,我已经复制到记事本中以确保没有奇怪的字符,我检查了行尾,尝试替换空格,删除反引号和什么都没有

谁能指出解决方案。

为了让这更奇怪,当我从客户端运行它时,如果我复制该输出并将其粘贴到新窗口中,它会用 sql 输出错误,它会运行良好。我尝试从多个客户端(adminer、dbeaver、mysqlworkbench 和 phpmysql)运行,但它在相同位置返回相同的错误

DDL

CREATE TABLE `xxx_projects` (
  `id` int(3) unsigned zerofill NOT NULL ,
  `status` int(3) unsigned zerofill NULL DEFAULT 1,
  `name` varchar(100) NOT NULL,
  `gp_id` varchar(100) DEFAULT NULL,
  `project_type` varchar(15) DEFAULT 'SFH',
  `project_type_id` int(11) NOT NULL,
  `master_plan_id` int(11) DEFAULT '0',
  `client_id` int(3) unsigned zerofill NOT NULL,
  `city_id` int(3) unsigned zerofill NOT NULL,
  `image_id` int(11) DEFAULT NULL,
  `lat` decimal(9,6) NOT NULL,
  `lon` decimal(9,6) NOT NULL,
  `kml_info` varchar(1000) DEFAULT NULL,
  `url` varchar(1000) DEFAULT NULL,
  `last_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `closeout_date` date DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=922 DEFAULT CHARSET=utf8;

插入声明

INSERT INTO `xxx_projects`
(`id`, `status`, `name`, `project_type_id`, `client_id`, `city_id`, `lat`, `lon`)
VALUES (563,0,'Santa Ana Collection',10,135,256,33.73369 , -117.92058 );

错误信息

SQL 错误 [1054] [42S22]:“字段列表”中的未知列“ ”

【问题讨论】:

    标签: mysql


    【解决方案1】:

    解决了!

    第 160 个字符(不间断空格)是罪魁祸首

    在我的原始源文件中,用户已经从网页复制/粘贴到 excel 中以获取数据

    我未能正确清理它,最终在我的 sql 中使用不间断空格而不是 char 32。

    为了在原始的 excel 文件中解决这个问题,我使用了这个 SUBSTITUTE(JackedUpString,CHAR(160),CHAR(32))

    希望这对其他人有所帮助因为我在 SO 中没有找到与此相关的任何内容

    This Article 也很有用

    【讨论】:

    • 这个故事的寓意是永远不要相信用户输入。永远!
    【解决方案2】:

    您将状态行声明为 int,但您正试图在其中放入一个字符。请注意,“0”是一个字符,0 是一个整数。根据我对 mysql 的经验,我认为这是问题所在。希望这可以解决您的问题。另外,如果我是你,我会将 'lat' 和 'lon' 声明为 varchar。

    【讨论】:

    • 在我的真实文件中,我传递的是 int 0 而不是 varchar '0',这只是我的一个测试的残余。我将修改 OP
    • 您是否在 mysql 控制台中使用反引号括起来的行名创建了表?
    • 在某些测试中是的,但从来没有问题。我实际上解决了这个问题。我将很快发布答案
    猜你喜欢
    • 2018-05-31
    • 1970-01-01
    • 2022-06-17
    • 2015-11-16
    • 1970-01-01
    • 2017-03-17
    • 1970-01-01
    • 2014-08-04
    • 1970-01-01
    相关资源
    最近更新 更多