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

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

(前に述べたように、これにはデータがありません)

編集:「dropSPSS_TEMP_2」コマンドをスキップすると、SPSS_TEMP_2データベースはTest2データベースとまったく同じになります。

4

1 に答える 1

0

最後に、IBMサポートからの素晴らしいヒントで解決策を見つけました。

問題を引き起こしているSPSS(SQLのフィールド)には2つの変数があります。それらは「ritid」と「hhid」です。SPSSで表示すると、値はドットやコンマを含まない数値として表示されます。.csvファイルとしてエクスポートした場合でも、問題は発生しませんが、.csvファイルはmysqlを介してインポートしたときに同じSQLエラーを報告します。

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

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

それでも、考慮すべきことがいくつかあります。たとえば、この方法でエクスポートすると、コンマが含まれる傾向があるため、再度インポートする場合に影響があります。しかし、PHPを使用してmysqlのSQLデータを編集することで簡単に理解できます。

すべての提案をありがとう!

于 2012-05-10T18:48:14.743 に答える