2013-03-11 11 views

Antwort

9

Es gibt keinen Unterschied.

Es gibt jedoch einen Vorbehalt, wenn Sie eine Zeichenfolge speichern.

Wenn Sie nur ein Byte-Array oder andere Binärdaten wie einen Stream oder eine Datei speichern möchten, verwenden Sie den Binär-Typ, für den sie bestimmt sind.

Zitat aus den MySQL manual:

Die Verwendung von ZEICHENSATZ binären in der Definition eines CHAR, VARCHAR, oder TEXT Spalte bewirkt, dass die Säule als binärer Datentyp behandelt werden. Zum Beispiel sind die folgenden Paare von Definitionen äquivalent:

CHAR(10) CHARACTER SET binary 
BINARY(10) 

VARCHAR(10) CHARACTER SET binary 
VARBINARY(10) 

TEXT CHARACTER SET binary 
BLOB 

Also, technisch gibt es keinen Unterschied.

Wenn Sie jedoch eine Zeichenfolge speichern, muss sie mithilfe eines Zeichensatzes von einer Zeichenfolge in Bytewerte konvertiert werden. Die Entscheidung ist, dies entweder vor dem MySQL-Server selbst zu tun oder Sie überlassen es MySQL, dies für Sie zu tun. MySQL wird mit einer BINARY-Zeichenkette unter Verwendung der BIN-Zeichensätze arbeiten.

Wenn Sie die Codierung in einem anderen Format speichern möchten können, sagen Sie ein Unternehmen Anforderung haben, die sagt, dass Sie 4 Byte pro Zeichen verwenden müssen (MySQL dies standardmäßig nicht tun) Sie dann den „CHARACTER SET BINARY verwenden könnte "in eine textuelle Spalte und führen Sie die Zeichensatzkodierung selbst durch.

Es lohnt sich auch, The BINARY and VARBINARY Types aus dem MySQL-Handbuch zu lesen, da dies wichtige Informationen wie Padding enthält.

Zusammenfassung: Es gibt keinen technischen Unterschied, da man ein Synonym zu dem anderen ist. Meiner Meinung nach ist es sinnvoll, Binärstrings in Datentypen zu speichern, die normalerweise einen String mit dem "CHARACTER SET BINARY" speichern und Byte-Arrays/Streams usw. in BINARY-Feldern speichern, die nicht durch Transformation der Daten durch einen Zeichensatz dargestellt werden können .

+0

Ich speichere Byte-Arrays. Wenn beide Optionen synonym sind, warum sagst du dann "benutze den Binär-Typ, für den er bestimmt ist"? Ist 'char character set binary' nicht auch für Byte-Arrays gedacht? – Pacerier

+0

@Pacerier, das war wirklich schlechte Formulierung meinerseits (ich werde dies klarer in meiner Antwort), Charset-Set binär ist ein Synonym für Binär, also technisch gibt es keinen Unterschied. IMO es ist verständlicher, einen binären Strom zu speichern (der nicht durch einen Zeichensatz und eine Kollation dargestellt werden kann), macht in BINARY Sinn, wenn Sie Ihre eigene Zeichenkodierung machen, ist es sinnvoll, diese in einem Feld mit CHARACTER SET BINARY – Steve

+1

zu speichern @Ic, übrigens wissen Sie, ob dieses Verhalten * offiziell * ist, oder können die Engines noch ihre eigene Implementierung durchführen? – Pacerier