2012-05-07 11 views
1

SPSS(統計プログラム)からローカルのmysqlデータベースにデータをエクスポートしようとしています。何らかの理由で私は '列カウントが値のカウントと一致しません'というメッセージが表示されます。私は、SQL文の何かが間違っているときにそのエラーを取得するのに慣れています。しかし、数時間のテストの後には、それが問題ではないことは明らかです。Mysql: 'common'列にエラーがありませんか? SPSSからmysqlにデータをエクスポートするとき

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のDB:

CREATE TABLE `Test2` (
    `ritid` double DEFAULT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; 

EDIT(前に述べたように、データはこの1つに存在しない): 'ドロップSPSS_TEMP_2' コマンドをスキップし、SPSS_TEMP_2データベースTest2データベースとまったく同じです。

+0

いずれの値にも '、'が含まれていますか? '113,456,789.0123'のように – MatBailie

+0

' SELECT ritid FROM SPSS_TEMP_2'というクエリを別に実行して、 'INSERT'で失敗したクエリの出力を投稿できますか? – Daan

+0

@Dems実際には可能な説明として聞こえるが、そうではない。 –

答えて

0

最後に、私は解決策を見つけ、IBMサポートからのヒントを得ました。

問題を引き起こしているSPSS(SQLのフィールド)に2つの変数があります。彼らは '嫌悪感'と 'ヒヒ'です。 SPSSで表示すると、ドットまたはカンマのない数値として値が発生します。 .csvファイルとしてエクスポートされても、問題は表示されませんが、.csvファイルはmysql経由でインポートするときに同じSQLエラーをレポートします。

しかし、SPSSファイルを.dbfファイルとして保存し、FileMaker Proで開くと、まったく同じ変数が、最初の文字の後にカンマを含む値として表示されます。しかし、1つはあるはずです。データの本質はそこに1つを望んでいません。しかしまだ...

SPSSからmysqlへのエクスポートを可能にするために、SPSSの変数の 'type'フィールドを 'type = numeric'ではなく 'type = string'に変更しました。それは輸出を可能にする。

まだ、考えなければならないことがいくつかあります。たとえば、それらをこのようにエクスポートすると、コンマを含む傾向があるため、それらを再度インポートすることにいくつかの意味があります。しかし、これはPHPでmysqlのsqlデータを編集することで簡単に行えます。

ありがとうございました!

関連する問題