MySQLの電話番号に最適なデータタイプはどれか、また、そのためのJavaタイプマッピングはどうすべきか。
私のウェブアプリケーションでは、Spring JDBCテンプレートでMySQLを使用しています。電話番号を10桁の数字だけで保存する必要があります。データタイプを使用するデータタイプについて少し混乱しています。
1.MySQLではどのようなデータタイプが望ましいですか? 2.Bean (POJO) クラスの Java データタイプは何にすべきでしょうか。 3.どのようにしてjavax validations/constrainsでそのデータタイプを長さと数字のみ許可されるように検証できますか?
49
3
文字列 & VARCHAR.
電話番号を実際の数字として保存しようとしないでください。書式が崩れたり、直前の「0」が削除されたりと、好ましくないことが起こります。
ユーザーの入力を数値だけに制限することもできますが、その場合でも、バックデータは数値ではなく文字/文字列として保存してください。
数字の長さの制限や検証、マスク(例:XXX-XXXX-XX)などを実装する前に、世の中の数字の長さやフォーマットがどのように違うのかを知っておいてください。
電話番号には、数字以外の文字も有効です。例えば、国際電話の番号の最初にある「00」の代わりに「+」を使うことができます。
コメント欄の会話を編集しました。
3.単純な正規表現参照: https://stackoverflow.com/questions/15111420/how-to-check-if-a-string-contains-only-digits-in-java。javax.constraints.Patternを使用します。
VARCHARの長さは15~20程度で十分であり、データベースには最適な選択肢となるでしょう。電話番号と一緒に様々なハイフンやプラス記号が必要になるでしょうから。