mysql:710
From: Shogo Hamamoto <Shogo Hamamoto <KHC01210@xxxxxxxxxx>>
Date: Fri, 19 Feb 1999 19:37:47 +0900
Subject: [mysql 00710] Re: 登録時のチェック
民斗 wrote: > 民斗です。 > > MySQL を使ってて、登録時の項目の厳密なチェックがあったらいいのに… > と思うことがあります。 > > 1) 数値項目に数字以外の文字を含む文字列を登録してしまった場合 > 文字列の先頭の数字部分の数値(文字列が数字以外で始まっている場合は0)が > 登録される。 > > 2) 項目の長さ以上の文字列を登録してしまった場合 > 余計な部分が黙って切り捨てられる。 > > どちらの場合も、アプリケーションで事前にチェックすることで防ぐことは > できますが、面倒です。 > > 上記のような場合は素直にエラーになってくれた方が嬉しいことがあります。 > 特に 2) の場合、エラーにならないから成功したと思ってたのに、検索すると > 引っ掛からないということが起こり得ますし…。 > > みなさんはどうしてます? また、他の RDB ではどうなんでしょう…? MySQLのマニュアルでは、INSERT構文の節で、 ・NOT NULL 定義去れた項目へのNULLの挿入 ・数値項目の範囲を超える値のセット ・数値項目への10.34 aのような値のセット ・CHAR、VARCHAR、TEXT、又はBLOB項目への最大長を超える文字列の挿入 ・日付又は時刻項目への項目属性に反した挿入 を警告レベルでは引っかけているようです。C APIのmysql_info()関数 でチェックできるらしいのですが、民斗さんの言うように、事前にチェック したり、素直にエラーにすることはできないようですね。 警告レベルのエラーの振舞いを変更できる命令があればいいですね。 警告レベルのエラーの時に、 ・強制的に変更してでも登録するか ・登録する場合、変更前のデータと変更後のデータをログに出すかどうか とでもできれば良いのではないしょうか。 とりあえず、現状では、 1.多くのデータを一辺にロードするような時 ディスクに余裕があれば、同じ構成のチェック用のワーク テーブルを用意して、そちらで試してからmysql_info()関数の結果を 見る。 2.プログラムで1件1件書くような場合 その度にmysql_info()関数でチェックする というようなところでしょうか。
703 1999-02-19 01:34 [民斗 <tommy@xxxxxxxx] 登録時のチェック -> 710 1999-02-19 19:37 ┗[Shogo Hamamoto <KHC0] 716 1999-02-21 05:31 ┗[民斗 <tommy@xxxxxxxx]