2013-03-11 14 views

答えて

9

違いはありません。

ただし、文字列を保存する場合は注意が必要です。

バイト配列またはストリームやファイルなどの他のバイナリデータのみを格納したい場合は、バイナリ形式をそのまま使用します。 MySQL manualから

引用:

CHAR、VARCHAR、 またはテキスト列の定義における文字セットバイナリの使用は、カラムがバイナリデータ型として処理されるようにします。 は例えば、下記の定義は等価です

CHAR(10) CHARACTER SET binary 
BINARY(10) 

VARCHAR(10) CHARACTER SET binary 
VARBINARY(10) 

TEXT CHARACTER SET binary 
BLOB 

だから、技術的に違いはありません。

ただし、文字列を格納するときは、文字セットを使用して文字列からバイト値に変換する必要があります。 MySQLサーバーの前でこれを自分自身で行うか、MySQLに任せておきますか? MySQLは、BIN文字セットを使用して文字列をBINARYにキャストすることによって実行されます。

エンコーディングを別の形式で保存する場合は、1文字あたり4バイトを使用する必要があるというビジネス要件があるとします(MySQLはデフォルトでこれを行いません)。次に、 "CHARACTER SET BINARY "をテキスト列に置き、自分でエンコードした文字セットを実行します。

このマニュアルでは、パッディングなどの重要な情報として、MySQLマニュアルからThe BINARY and VARBINARY Typesも読む価値があります。

要約: もう1つの同義語と技術的な違いはありません。私の意見では、文字セットを使ってデータを変換することで表現できないバイナリフィールドに "CHARACTER SET BINARY"を使って文字列を保持し、バイト配列/ストリームなどを格納するデータ型にバイナリ文字列を格納するのは理にかなっています。

+0

私はバイト配列を格納しています。両方のオプションが同義語である場合、なぜ* "バイナリタイプを" * "のために設計されたものとして使用するのですか? 'char character set binary 'もバイト配列用に設計されていませんか? – Pacerier

+0

@Pacerierこれは本当に悪い言葉でした(私はこれを私の答えでより明確にします)、charset setバイナリはバイナリの同義語なので、技術的には違いはありません。 IMOバイナリストリーム(文字セットと照合では表現できない)をBINARYで意味をなさないように格納することは理解できます。独自の文字エンコーディングを行う場合は、文字セットをCHARACTER SET BINARY – Steve

+1

@Ic、btwあなたはこの動作が*公式*であるかどうか、あるいはエンジンがまだ独自の実装を行うことが許されていることを認識していますか? – Pacerier

関連する問題