[前][次][番号順一覧][スレッド一覧]

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]