2013-03-11 11 views

Odpowiedz

9

Nie ma różnicy.

Istnieje jednak zastrzeżenie, jeśli przechowujesz ciąg znaków.

Jeśli chcesz tylko przechowywać tablicę bajtów lub inne dane binarne, takie jak strumień lub plik, użyj typu binarnego, ponieważ jest to przeznaczenie.

żądanie z MySQL manual:

Zastosowanie znaków wybrać binarnego w definicji Char VARCHAR lub TEXT powoduje kolumnę być traktowane jako binarna typu. Na przykład, następujące pary definicje są równoważne:

CHAR(10) CHARACTER SET binary 
BINARY(10) 

VARCHAR(10) CHARACTER SET binary 
VARBINARY(10) 

TEXT CHARACTER SET binary 
BLOB 

Tak, technicznie nie ma żadnej różnicy.

Jednak podczas zapisywania łańcucha należy go przekonwertować z ciągu na wartości bajtów za pomocą zestawu znaków. Decyzja polega na tym, aby zrobić to sam przed serwerem MySQL lub pozostawić go do MySQL zrobić za ciebie. MySQL będzie działał przez rzutowanie ciągu znaków na BINARY przy użyciu zestawów znaków BIN.

Jeśli chcesz przechowywać kodowanie w innym formacie, powiedzmy, że masz wymóg biznesowy, który mówi, że musisz użyć 4 bajtów na znak (MySQL nie robi tego domyślnie), wtedy możesz użyć "CHARACTER SET BINARY "do kolumny tekstowej i wykonaj samemu kodowanie zestawu znaków.

Warto również przeczytać z podręcznika MySQL, ponieważ zawiera ważne informacje, takie jak dopełnienie.

Podsumowanie: Nie ma różnicy techniczny jako jeden jest synonimem do drugiego. Moim zdaniem logiczne jest przechowywanie ciągów binarnych w typach danych, które normalnie przechowują ciąg znaków przy użyciu "CHARACTER SET BINARY" i do przechowywania tablic bajtów/strumieni itp. W polach BINARY, których nie można przedstawić przez przekształcenie danych za pomocą zestawu znaków .

+0

Przechowuję tablice bajtów. Jeśli obie opcje są synonimiczne, dlaczego mówisz * "używaj typu binarnego, ponieważ jest on przeznaczony dla" *? Czy nie jest to również "char character set binary" zaprojektowany dla tablic bajtów? – Pacerier

+0

@Pacerier, który naprawdę był złym sformułowaniem z mojej strony (uczynię to jaśniejszym w mojej odpowiedzi), zestaw binarny zestawu znaków jest synonimem binarnym, więc technicznie nie ma różnicy. IMO jest bardziej zrozumiałe, aby przechowywać strumień binarny (który nie może być reprezentowany przez zestaw znaków i sortowanie) ma sens w BINARNYM, jeśli robisz własne kodowanie znaków, sensownym jest przechowywanie go w polu z CHARACTER SET BINARY – Steve

+1

@Ic, btw jesteś świadomy, czy to zachowanie jest * oficjalne *, lub czy silniki nadal mogą wykonywać własną implementację? – Pacerier

Powiązane problemy