1

我正在尝试将数据从 SPSS(统计程序)导出到本地 mysql 数据库。出于某种原因,我收到“列数与值计数不匹配”消息。当 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 数据库完全相同。

4

1 回答 1

0

最后我找到了解决方案,IBM Support 提供了一个很好的提示。

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

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

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

不过,还有几件事需要考虑。例如,以这种方式导出它们对再次导入它们有一些影响,因为它们往往包含逗号。但这很容易通过使用 PHP 编辑 mysql 中的 sql 数据来解决。

感谢所有的建议!

于 2012-05-10T18:48:14.743 回答