MySQLはカスタムデータ型をサポートしていますか?たとえば、郵便番号はvarchar(10)フィールドに格納されintますが、空白のオプションと5桁か5 + 4桁の郵便番号かを示すフラグを付けて、に圧縮できます。
そのようなことのためにシームレスなデータ型をインストールする方法はありますか?アプリケーションに関する限り、それは文字列型であり、アプリケーションが無効なデータを渡すと、データの切り捨て(警告の有無にかかわらず)が発生します。
カスタム関数を使用できます(たとえば、INET_ATONIPv4アドレス用の組み込み関数があります。ただし、zip LIKE '12345%'適切にインデックスを作成する必要があるものは許可されません。カスタムデータ型の適切なサポートにより、データ型をマークできます。そのため、コンパクトzip intは、並べ替えられると、まるでのように並べ替えられzip varchar(10)ます。
これにより、列の幅を固定でき、6または10バイトの変数ストレージを固定幅の4バイトに削減できます。
適用可能な用途がいくつかあります
- 郵便番号
- IPv6アドレス
- 分のレベルの精度と容量を超えるカスタム
2038ストレージタイムスタンプフィールドでdatetime、使用量は未満ですが、実装年より前の日付をサポートする必要はありません(システムで最も古い日付の場合、最小は2007になります) - DSTを実装するタイムスタンプ(存在しないようです)
- 2文字の米国の州は1バイトで保存できます
- longは
ENUM、カスタムデータ型に分離DESCRIBEできるため、すべてのラッピングで出力がそれほど乱雑になりません。
データ型ハンドラーは、関数が保存される方法と同様に保存されることを期待しています。
データベースエンジンには、このようなリモートで何かがありますか?私は主にMySQLを使用しますが、これを実装したことがあるかどうか、アプリケーションに関数のような関数を呼び出させること以外は興味がありINET_ATONます。
MS SQLにはそのような性質があるように見えますが、単なる同義語以上のものかどうかを知りたいと思います。(例えばbooleanの同義語可能性がありtinyint(1)、またはpostal_codeのいずれかのcharまたはvarchar (5または9または10))シノニムは、私はおよそここに求めていたものではないです。
IPv6にbinary(16)、又はそれは(のために使用することができたエイリアシングに限定されるstateなってS enum、S)
intはzipコードを保存することはできません。たとえば、カナダでは「A9A A9A」の形式が使用されます。郵便番号用のカスタムデータ型を作成することをお勧めします。ただし、それらの一部の処理方法を再検討することをお勧めします(たとえば、1バイトのフィールドに状態を保存すると、潜在的な「その他」の問題が発生します)。また、日付/時刻データ型を再実装しないでください。提供されているデータ型が使用できないほど不足していない限り(サイズは考慮されません)、ユーザーを混乱させるだけです。