DROP TABLE IF EXISTS `transactions`;
CREATE TABLE `transactions` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`purchase_date` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `transactions` (`purchase_date`) VALUES (NULL)
このコードで問題を特定しました。実行すると、次のエラーが表示されます。
[クエリ3のエラー]「フィールドリスト」の不明な列「purchase_date」
誰でもアイデア?
INSERT
ステートメントのpurchase_date
と'
の間に印刷できない文字30(RecordSeparator)が挿入されています。テキスト('purchase_date')
を削除し、手動で書き直してください。
このエラーが発生したときの非常にニッチなソリューション。
持っていた BEFORE INSERT
で何かをしたテーブルのトリガーNEW.`field_mysql_doesnt_think_exists`
そして、そのフィールドを挿入ステートメントに渡さなかった場合、
[ERROR in query 3] Unknown column 'field_mysql_doesnt_think_exists' in 'field list'
私はこれを理解するために一日の大部分を過ごしました。私の問題も同じでした。目に見えない文字がクエリを押しつぶし、「不明な列」エラーを返しました。
Windowsに戻り、NotePad ++を使用してゴミを削除することで解決しました。
そもそもゴミはどうやってそこに入ったの? phpMyAdminでブックマークしたり、テキストエディタで保存したりするのではなく、長く複雑なクエリをLibreOffice Writer(機能仕様ドキュメント)にコピーするというミスを犯したためだと思います。それらをLibreOfficeからクエリウィンドウに貼り付けることは、ガベージの発生元(と思う)です。
そこに到達すると、マラリアのように持続しました。クエリ全体を手動で再入力することでそれを取り除くことさえできませんでした-それをNotePad ++(エンコードメニュー)に入れ、ANSIとUTF8コンボを表示してから、手動でゴミを削除する必要がありました。
それが完了すると、クエリは機能しました。
これは、テーブル構造の構築時に列名を貼り付けた場合にも発生する可能性があります。同じエラー-印刷できない/不可視の文字はクエリではなくテーブル構造にあります。
別のシナリオでの同じエラー:
これは、変数の@記号を忘れた場合にも発生します。
SET @myVar1=1; SELECT @myVar1; -- GOOD, correctly prints: 1
SET @myVar1=1; SELECT myVar1; -- BAD, prints: Unknown column 'myVar1' in 'field list'
これは他の人には役に立たないかもしれませんが、この「万が一に備えて」追加することは誰かを助けます。
私の状況では、別の解決策でした。
大きなデータセットをExcel CSVファイルとして受け取り、(WIL)スクリプトを使用して.csvファイルをインポート可能な.sqlファイルに変換します。スクリプトでエラーが発生したため、これらの2行は同じテーブル名を参照していません(最初の場所をハードコーディングして更新するのを忘れていました)。
* "INSERT INTO `old_table_name` (`cid`, `date`, etc etc"
* "CREATE TABLE IF NOT EXISTS `":_dbName:"` (etc etc "
変数からテーブル名も取得するように最初の行を変更しました。
* "INSERT INTO `":_dbName:"` (`cid`, `date`, etc etc"
したがって、インポートSQLファイルのこれらの2行を確認してください。