14

と はどう違い ますbinary(10)char(10)character set binary

そしてvarbinary(10)varchar(10)character set binary

それらはすべてのMySQL エンジンで同義ですか?

注意すべき落とし穴はありますか?

4

1 に答える 1

14

違いはありません。

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

バイト配列またはストリームやファイルなどのその他のバイナリ データのみを格納する場合は、バイナリ型を使用してください。

MySQLマニュアルからの引用:

、、または列CHARACTER SET binaryの定義で を使用すると、列がバイナリ データ型として扱われます。たとえば、次の定義のペアは同等です。CHARVARCHARTEXT

CHAR(10) CHARACTER SET binary
BINARY(10)

VARCHAR(10) CHARACTER SET binary
VARBINARY(10)

TEXT CHARACTER SET binary
BLOB

したがって、技術的には違いはありません。

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

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

パディングなどの重要な情報が詳しく説明されているため、MySQL マニュアルの TheBINARYおよびVARBINARYTypesも読む価値があります。

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

于 2013-03-11T10:00:31.370 に答える