MySQLはカスタムデータ型をサポートしていますか?たとえば、郵便番号はvarchar(10)
フィールドに格納されint
ますが、空白のオプションと5桁か5 + 4桁の郵便番号かを示すフラグを付けて、に圧縮できます。
そのようなことのためにシームレスなデータ型をインストールする方法はありますか?アプリケーションに関する限り、それは文字列型であり、アプリケーションが無効なデータを渡すと、データの切り捨て(警告の有無にかかわらず)が発生します。
カスタム関数を使用できます(たとえば、INET_ATON
IPv4アドレス用の組み込み関数があります。ただし、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バイトのフィールドに状態を保存すると、潜在的な「その他」の問題が発生します)。また、日付/時刻データ型を再実装しないでください。提供されているデータ型が使用できないほど不足していない限り(サイズは考慮されません)、ユーザーを混乱させるだけです。