- - PR -
LOAD DATA INFILE での型違い値の制御
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2008-05-09 20:25
みなさん、初めまして。
現在、仕事でファイル読込処理を実装しています。 読込部分は問題なく実装することが出来たのですが、 誤った型を投入しようとした際にエラーを発生させるといった処理が うまく出来ずに困っています。 調べたところ、SQLモードで制御できるとのことだったので、 my.iniのsql-modeにTRADITIONALを設定してみたのですが制御がききません。 例えば、int型のテーブル定義に文字列を投入しようとしても0が登録されてしまいます。 my.iniの反映タイミングが分からず、テーブルの作り直し・DBの作り直し・DBの再起動 としてみたのですがwarningが発生するだけでerrorが発生しません。 何か、見落とし・勘違い部分等ありましたらご指摘下さい。 お願いします! | ||||
|
投稿日時: 2008-05-09 22:21
もうすこし具体的に書かないと回答できません
使用言語を記述するとか、部分的でもいいからコードを開示するとか SQLモードに関しては私はなんのことかわかりませんが、誤った型の値があるということは検知できるのですか? | ||||
|
投稿日時: 2008-05-23 17:30
失礼しました。
使用言語は、Javaです。 使用SQL===== load data local infile [ファイル名] into table テーブル名 FIELDS TERMINATED BY ',' enclosed by '"' lines terminated by '\r\n' (Colmun1, Colmun2, Colmun3) =================== ただ、今回の問題点はSQLでファイル読込した際に 型違い、設定値オーバーの際に勝手に適当な値を 登録してしまうというところにあります。 例えば、int型のカラム部分に文字列を読み込んでしまった際は ERRORをだして登録を止めて欲しいのに、勝手な値"0"を登録して しまうといったことで困っています。 誤った型の値かどうかは、WORNINGが出力されるので実装としては WORNINGが発生した場合は、登録データを全削除するといった方法で 今回の開発は回避できました。 出来れば、プログラムではなくSQLで回避したかったので ERRORで登録を止めるといった方法を知っている方がいれば、 ご教授頂きたいです。 でも、load data 処理は、insertと違ってrollbuckが 出来ないみたいですし、無理なんでしょうか?? 自分で調べてみたところ、my.iniのsql-modeにTRADITIONALを 設定しておくとINSERT文は型違い、設定値オーバーの値を登録しようと した際にはERRORで登録を中止してくれるみたいです。 | ||||
|
投稿日時: 2008-05-23 20:33
ああ。
大切な情報が抜けていました。 使用DBは、MySQLの5.0.6です。 宜しくお願いします。 | ||||
|
投稿日時: 2008-05-24 19:27
であるなら、ここは Insider.NET 会議室なので板違いです。 Java Solution 会議室で再度質問をした方が良いと思います。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |
1