2013-03-11 14 views

risposta

9

Non c'è differenza.

Tuttavia, vi è un avvertimento se si sta memorizzando una stringa.

Se si desidera archiviare solo un array di byte o altri dati binari come un flusso o un file, utilizzare il tipo binario in quanto è ciò a cui sono destinati.

citazione dal MySQL manual:

L'uso di CHARACTER SET binario nella definizione di un CHAR, VARCHAR, o colonna TEXT provoca la colonna di essere trattato come un tipo di dati binari. Ad esempio, le seguenti coppie di definizioni sono equivalenti:

CHAR(10) CHARACTER SET binary 
BINARY(10) 

VARCHAR(10) CHARACTER SET binary 
VARBINARY(10) 

TEXT CHARACTER SET binary 
BLOB 

Quindi, tecnicamente non c'è differenza.

Tuttavia, quando si memorizza una stringa, è necessario convertirla da una stringa in valori di byte utilizzando un set di caratteri. La decisione è di farlo tu stesso prima del server MySQL o lasciare che MySQL faccia per te. MySQL si esibirà con il cast di una stringa su BINARY usando i set di caratteri BIN.

Se si desidera archiviare la codifica in un altro formato, si supponga di disporre di un requisito aziendale che indica che è necessario utilizzare 4 byte per carattere (MySQL non esegue questa operazione per impostazione predefinita), quindi è possibile utilizzare il "SET DI CARATTERI BINARIO "su una colonna testuale ed esegui il set di caratteri che ti codifica.

Vale anche la pena leggere il manuale di MySQL The BINARY and VARBINARY Types in quanto fornisce informazioni importanti come il riempimento.

Riepilogo: Non c'è alcuna differenza tecnica poiché uno è sinonimo dell'altro. A mio parere è logico memorizzare stringhe binarie in tipi di dati che normalmente terrebbero una stringa usando "CHARACTER SET BINARY" e per memorizzare array di byte/stream ecc. In campi BINARY che non possono essere rappresentati trasformando i dati attraverso un set di caratteri .

+0

Sto memorizzando i matrici di byte. Se entrambe le opzioni sono sinonimi, perché dici * "usa il tipo binario in quanto è progettato per" *? Non è impostato il set di caratteri char binario? Progettato anche per gli array di byte? – Pacerier

+0

@Pacerier che in realtà era una formulazione errata da parte mia (lo renderò più chiaro nella mia risposta), set di caratteri binary è sinonimo di binario quindi tecnicamente non c'è differenza. IMO è più comprensibile memorizzare un flusso binario (che non può essere rappresentato da un set di caratteri e regole di confronto) ha senso in BINARY, se stai facendo la tua codifica di caratteri ha senso memorizzarlo in un campo con CARATTERE SET BINARIO – Steve

+1

@Ic, btw sei a conoscenza se questo comportamento è * ufficiale *, o se i motori sono ancora autorizzati a fare la propria implementazione? – Pacerier