Mysql: 'common' 列不匹配错误?从SPSS导出数据到mysql时

标签 mysql sql

我正在尝试将数据从 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 数据库完全相同。

最佳答案

在 IBM 支持人员的很好提示下,我终于找到了解决方案。

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

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

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

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

谢谢大家的建议!

关于Mysql: 'common' 列不匹配错误?从SPSS导出数据到mysql时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10487495/

相关文章:

php - MySQL连接三张表,如果为空则显示0

mysql - 同一张表上的多对一关系

mysql - 如何为 mysql 中插入的每一行更新子查询?

mysql - 如何通过一个语句描述数据库中的所有表?

php - 如何在 mysql 中查找 Sage 50 Database v22 中的关系(已转换为 mysql)

mysql - 删除行: No Single Member Has More Than x Records

mysql - 表 '/tmp/#sql_1_0.MAI' 是只读的

mysql - 如何在 MYSQL 数据库表的列中仅插入 Null 集的值

python - 如何使用 python db-api 安全地生成 SQL LIKE 语句

MySQL 语法 : can't create table