Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql:“公共”列不匹配错误?将数据从SPSS导出到mysql时_Mysql_Sql - Fatal编程技术网

Mysql:“公共”列不匹配错误?将数据从SPSS导出到mysql时

Mysql:“公共”列不匹配错误?将数据从SPSS导出到mysql时,mysql,sql,Mysql,Sql,我正在尝试将数据从SPSS统计程序导出到本地mysql数据库。出于某种原因,我收到了“Column count与value count不匹配”消息。我习惯于在SQL语句出错时出现这种错误。但经过数小时在不同环境下的测试,很明显这不是问题所在 SPSS语法是SQL。可以使用的语法如下所示: SAVE TRANSLATE /TYPE=ODBC /CONNECT='DSN=localhost;UID=root;PWD=!S%E&u#k;' /ENCRYPTED /MISSING=IGNORE

我正在尝试将数据从SPSS统计程序导出到本地mysql数据库。出于某种原因,我收到了“Column count与value count不匹配”消息。我习惯于在SQL语句出错时出现这种错误。但经过数小时在不同环境下的测试,很明显这不是问题所在

SPSS语法是SQL。可以使用的语法如下所示:

SAVE TRANSLATE /TYPE=ODBC
/CONNECT='DSN=localhost;UID=root;PWD=!S%E&u#k;'
/ENCRYPTED
/MISSING=IGNORE
/SQL='CREATE TABLE test1 (jaar double , maand double , dag double , huishoud double , persoon double , verpl double , rit double )'
/REPLACE
/TABLE='SPSS_TEMP_2'
/KEEP=jaar, maand, dag, huishoud, persoon, verpl, rit
/SQL='INSERT INTO test1 (jaar, maand, dag, huishoud, persoon, verpl, rit) SELECT jaar, maand, dag, huishoud, persoon, verpl, rit FROM SPSS_TEMP_2'
/SQL='DROP TABLE SPSS_TEMP_2'.
运行此命令后,mysql数据库如下所示:

CREATE TABLE `test1` (
  `jaar` double DEFAULT NULL,
  `maand` double DEFAULT NULL,
  `dag` double DEFAULT NULL,
  `huishoud` double DEFAULT NULL,
  `persoon` double DEFAULT NULL,
  `verpl` double DEFAULT NULL,
  `rit` double DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; 
使用以下数据:

INSERT INTO `test1` (`jaar`, `maand`, `dag`, `huishoud`, `persoon`, `verpl`, `rit`) VALUES
(2005, 1, 3, 1, 1, 1, 1),
(2005, 1, 3, 0, 0, 1, 1),
(2005, 1, 3, 1, 1, 1, 1),
(2005, 1, 3, 0, 0, 1, 1),
(2005, 1, 3, 0, 0, 1, 1),
(2005, 1, 3, 0, 0, 1, 1),
(2005, 1, 3, 0, 1, 1, 1),
(2005, 1, 3, 0, 0, 1, 1),
(2005, 1, 3, 0, 0, 1, 1),
(2005, 1, 3, 0, 0, 1, 1);
到目前为止还不错。但是,完整的数据集包含129个变量和sql字段。第一个给出错误的称为“ritid”。当它与其他文件一起插入时,将停止整个过程。但即使单独插入,它也会断开。它创建了表,但没有任何数据。如下图所示。我对出现这种错误并不感到奇怪。有人能提供一些建议吗

SAVE TRANSLATE /TYPE=ODBC
  /CONNECT='DSN=localhost;UID=root;PWD=!l*z%J,[;'
  /ENCRYPTED
  /MISSING=IGNORE
  /SQL='CREATE TABLE Test2 (ritid double )'
  /REPLACE
  /TABLE='SPSS_TEMP_2'
  /KEEP=ritid
  /SQL='INSERT INTO Test2 (ritid) SELECT ritid FROM SPSS_TEMP_2'
  /SQL='DROP TABLE SPSS_TEMP_2'.

>Error # 6491.  Text: Case #1 has been dropped
>Insert record failed
>Execution of this command stops.
>[Actual][MySQL] Column count doesn't match value count at row 1

>Error # 6487
>Write request failed - couldn't write any data.
mysql数据库:

CREATE TABLE `Test2` (
  `ritid` double DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
如前所述,本文件中没有数据

编辑:
跳过“drop SPSS_TEMP_2”命令时,SPSS_TEMP_2数据库与Test2数据库完全相同。

最后我找到了解决方案,IBM支持人员给出了一个很好的提示

SQL中SPSS字段中有两个变量导致了问题。它们是“ritid”和“hhid”。在SPSS中查看时,这些值以数字形式出现,没有任何点或逗号。当导出为.csv文件时,仍然没有显示任何问题,尽管在通过mysql导入时,.csv文件确实报告了相同的SQL错误

但是,当将SPSS文件保存为.dbf文件并在FileMaker Pro中打开时,完全相同的变量显示为在第一个字符后带有逗号的值。应该有一个;数据的性质不希望有一个在那里。但还是

为了使从SPSS到mysql的导出成为可能,我将SPSS中变量的“type”字段改为“type=string”,而不是“type=numeric”。这使得出口成为可能

不过,还有一些事情需要考虑。例如,以这种方式导出它们会对再次导入它们产生一些影响,因为它们往往包含逗号。但是,通过使用PHP在mysql中编辑sql数据,很容易做到这一点


谢谢你的建议

你的价值观中有没有,在它们里面?与113456789.0123一样,您可以单独运行查询SELECT ritid FROM SPSS_TEMP_2并发布插入失败的查询输出吗?@Dems听起来确实是一个可能的解释,但没有,没有任何解释。@Daan不幸的是,SPSS_TEMP_2数据库也不包含任何记录。SPSS首先创建一个临时数据库,将新值传输到Test2数据库,然后删除SPSS_temp_2。因此,问题首先出现在临时数据库中。。感谢到目前为止的建议,编辑了这个问题。在没有DROP TABLE SPSS_TEMP_2命令的情况下再次运行代码后,能否发布SHOW CREATE TABLE SPSS_TEMP_2的输出?