MySQLはカスタムデータ型をサポートしていますか?たとえば、郵便番号はvarchar(10)
フィールドに格納されますが、空白のオプションと5桁かどうかに関するフラグを使用して、int
に圧縮できます。または5 + 4桁の郵便番号。
そのようなもののためにシームレスなデータ型をインストールする方法はありますか?アプリケーションに関する限り、それは文字列型であり、アプリケーションが無効なデータを渡した場合、データの切り捨て(警告の有無にかかわらず)が発生します。
カスタム関数を使用することもできます(たとえば、IPv4アドレスには組み込み関数_INET_ATON
_があります。ただし、これは_Zip LIKE '12345%'
_などを適切にインデックス付けする必要があります。カスタムのサポートデータ型を使用すると、データ型を並べ替え可能としてマークできます。したがって、コンパクトな_Zip int
_を並べ替えると、Zip varchar(10)
であるかのように並べ替えられます。
これにより、列を固定幅にすることができ、6バイトまたは10バイトの可変ストレージを固定幅の4バイトに切り詰めることができます。
いくつかの適用可能な用途があります
2038
_を超え、datetime
よりもストレージの使用量が少ないカスタムタイムスタンプフィールド。ただし、実装年より前の日付をサポートする必要はありません(最も古い場合、最小値は2007である可能性があります)システムの日付)ENUM
sはカスタムデータタイプに分離できるので、DESCRIBE
の出力はすべてのラッピングでそれほど乱雑に見えません。データ型ハンドラーは、関数の格納方法と同様に格納されると思います。
データベースエンジンに、リモートでこのようなものはありますか?私は主にMySQLを使用しますが、これが実装されているかどうか、アプリケーションに_INET_ATON
_関数のような関数を呼び出さない限り、興味があります。
MS SQLにはそのような性質があるようです ですが、単なる同義語ではないかどうか知りたいです。 (たとえば、boolean
はtinyint(1)
の同義語、またはchar
またはvarchar
_postal_code
_のいずれかの_(5
_または_9
_または_10)
_)同義語は、私がここで求めているものではありません。
MySQLはカスタムデータ型をサポートしていますか?
簡単な答え:いいえ
データベースエンジンに、リモートでこのようなものはありますか?私は主にMySQLを使用していますが、これが実装されているかどうか、アプリケーションがINET_ATON関数のような関数を呼び出さない限り、私は興味があります。
Oracleには _CREATE TYPE
_ があります。これは、OOクラスに類似しています。メンバー関数や 継承
Postgresには _CREATE TYPE
_ があり、OOクラス(メンバー関数または継承なし))とは少し異なりますが、非常に柔軟で便利です。新しいベースタイプを作成することもできます。継承またはサブタイピングの形式を許可し、基本的にいくつかの制約付きでベースタイプを拡張する _CREATE DOMAIN
_ もあります。 inet や geometric 型など、デフォルトで興味深い基本型もいくつかあります。Postgresでは、Cで拡張機能を記述できますこの例の base36データ型 を使用したカスタムデータ型の場合.
SQL Serverには _CREATE TYPE
_ があり、既存のシステムデータタイプに基づいてカスタムデータタイプを作成できます。たとえば、基本的にVARCHAR(11)
として定義されるSSN
と呼ばれる型を作成できますが、これにより、フィールドの大きさを覚える必要がなくなります。