と はどう違い ますbinary(10)
かchar(10)character set binary
?
そしてvarbinary(10)
対varchar(10)character set binary
?
それらはすべてのMySQL エンジンで同義ですか?
注意すべき落とし穴はありますか?
と はどう違い ますbinary(10)
かchar(10)character set binary
?
そしてvarbinary(10)
対varchar(10)character set binary
?
それらはすべてのMySQL エンジンで同義ですか?
注意すべき落とし穴はありますか?
違いはありません。
ただし、文字列を格納する場合は注意が必要です。
バイト配列またはストリームやファイルなどのその他のバイナリ データのみを格納する場合は、バイナリ型を使用してください。
MySQLマニュアルからの引用:
、、または列
CHARACTER SET binary
の定義で を使用すると、列がバイナリ データ型として扱われます。たとえば、次の定義のペアは同等です。CHAR
VARCHAR
TEXT
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
およびVARBINARY
Typesも読む価値があります。
要約:
一方が他方の同義語であるため、技術的な違いはありません。私の意見では、通常は を使用して文字列を保持するデータ型にバイナリ文字列を格納し、文字セットを介してデータを変換することによって表現できないフィールドにCHARACTER SET BINARY
バイト配列/ストリームなどを格納することは論理的に理にかなっています。BINARY