Jaka jest różnica między VARCHAR i CHAR w MySQL?
Próbuję przechowywać skróty MD5.
Jaka jest różnica między VARCHAR i CHAR w MySQL?
Próbuję przechowywać skróty MD5.
Odpowiedzi:
VARCHAR
ma zmienną długość.
CHAR
ma stałą długość.
Jeśli Twoje treści mają ustalony rozmiar, uzyskasz lepszą wydajność CHAR
.
Zobacz stronę MySQL na temat typów CHAR i VARCHAR, aby uzyskać szczegółowe wyjaśnienie (koniecznie przeczytaj również komentarze).
Values in VARCHAR columns are variable-length strings. The length can be specified as a value from 0 to 255 before MySQL 5.0.3, and 0 to 65,535 in 5.0.3 and later versions.
CHAR Vs VARCHAR
CHAR służy do zmiennej wielkości o stałej długości
VARCHAR jest używany do zmiennej długości zmiennej wielkości.
Na przykład
Create table temp
(City CHAR(10),
Street VARCHAR(10));
Insert into temp
values('Pune','Oxford');
select length(city), length(street) from temp;
Wyjście będzie
length(City) Length(street)
10 6
Wniosek: Aby efektywnie wykorzystać przestrzeń dyskową, należy użyć VARCHAR Zamiast CHAR, jeśli zmienna długość jest zmienna
CHAR(x)
Kolumna może mieć tylko dokładnie x
znaków. Kolumna może mieć maksymalnie znaków.VARCHAR(x)
x
Ponieważ twoje skróty MD5 będą zawsze tego samego rozmiaru, prawdopodobnie powinieneś użyć CHAR
.
Jednak nie powinieneś używać MD5; zna słabości.
Zamiast tego użyj SHA2.
Jeśli masz hashujące hasła, powinieneś użyć bcrypt.
Jaka jest różnica między VARCHAR i CHAR w MySQL?
Do już udzielonych odpowiedzi chciałbym dodać, że w systemach OLTP lub w systemach z częstymi aktualizacjami rozważ użycie CHAR
nawet dla kolumn o zmiennej wielkości z powodu możliwego VARCHAR
fragmentacji kolumn podczas aktualizacji.
Próbuję przechowywać skróty MD5.
Skrót MD5 nie jest najlepszym wyborem, jeśli bezpieczeństwo naprawdę ma znaczenie. Jeśli jednak użyjesz dowolnej funkcji skrótu, rozważ BINARY
zamiast niej jej typ (np. MD5 wygeneruje 16-bajtowy skrót, więc BINARY(16)
wystarczyłoby zamiast CHAR(32)
32 znaków reprezentujących cyfry szesnastkowe. Pozwoliłoby to zaoszczędzić więcej miejsca i zwiększyć wydajność.
Varchar odcina końcowe spacje, jeśli wprowadzone znaki są krótsze niż zadeklarowana długość, a char nie. Char będzie wstawiał spacje i zawsze będzie miał długość deklarowaną. Pod względem wydajności, varchar jest bardziej biegły, ponieważ przycina znaki, aby umożliwić większą regulację. Jeśli jednak znasz dokładną długość char, char wykona się z nieco większą prędkością.
W większości współczesnych RDBMS są to synonimy. Jednak w przypadku systemów, które nadal mają rozróżnienie, pole CHAR jest przechowywane jako kolumna o stałej szerokości. Jeśli zdefiniujesz go jako CHAR (10), w tabeli zostanie zapisanych 10 znaków, w których „padding” (zazwyczaj spacje) jest używany do wypełnienia dowolnego miejsca, którego dane nie zajmują. Na przykład zapisanie „bob” zostanie zapisane jako („bob” +7 spacji). Kolumna VARCHAR (znak zmiennej) służy do przechowywania danych bez marnowania dodatkowego miejsca, które zajmuje kolumna CHAR.
Jak zawsze Wikipedia mówi głośniej.
CHAR jest polem o stałej długości; VARCHAR jest polem o zmiennej długości. Jeśli przechowujesz ciągi o bardzo zmiennej długości, takie jak nazwy, użyj VARCHAR, jeśli długość jest zawsze taka sama, użyj CHAR, ponieważ jest nieco bardziej wydajny pod względem rozmiaru, a także nieco szybszy.
CHAR ma stałą długość, a VARCHAR ma zmienną długość. CHAR zawsze wykorzystuje tę samą ilość miejsca do przechowywania na pozycję, podczas gdy VARCHAR wykorzystuje tylko ilość niezbędną do przechowywania rzeczywistego tekstu.
Char jest typem danych znakowych o stałej długości, varchar jest typem danych znakowych o zmiennej długości.
Ponieważ char jest typem danych o stałej długości, rozmiar pamięci wartości char jest równy maksymalnemu rozmiarowi dla tej kolumny. Ponieważ varchar jest typem danych o zmiennej długości, rozmiar pamięci wartości varchar to rzeczywista długość wprowadzonych danych, a nie maksymalny rozmiar dla tej kolumny.
Możesz użyć znaku, gdy oczekuje się, że wpisy danych w kolumnie będą tego samego rozmiaru. Możesz użyć varchar, gdy oczekuje się, że wpisy danych w kolumnie będą się znacznie różnić.
według książki High Performance MySQL :
VARCHAR przechowuje ciągi znaków o zmiennej długości i jest najczęstszym typem ciągu znaków. Może wymagać mniej miejsca do przechowywania niż typy o stałej długości, ponieważ zużywa tylko tyle miejsca, ile potrzebuje (tj. Mniej miejsca jest używane do przechowywania krótszych wartości). Wyjątkiem jest tabela MyISAM utworzona za pomocą ROW_FORMAT = FIXED, która wykorzystuje stałą ilość miejsca na dysku dla każdego wiersza i może w ten sposób marnować miejsce. VARCHAR poprawia wydajność, ponieważ oszczędza miejsce.
CHAR ma stałą długość: MySQL zawsze przydziela wystarczającą ilość miejsca dla określonej liczby znaków. Podczas przechowywania wartości CHAR MySQL usuwa spacje końcowe. (Tak było również w przypadku VARCHAR w MySQL 4.1 i starszych wersjach - CHAR i VAR CHAR były logicznie identyczne i różniły się tylko formatem pamięci.) Wartości są wypełniane spacjami stosownie do potrzeb dla porównań.
VARCHAR
potrzebuje dynamicznie przydzielać pamięć, gdy jest to wymagane, a tym samym zmniejszać wydajność w przeciwieństwie do CHAR
, prawda?
Char
ma stałą długość (obsługuje 2000 znaków), oznacza, że znak jest typem danych
Varchar
ma zmienną długość (obsługuje 4000 znaków)
Char lub varchar - służy do wprowadzania danych tekstowych, w których długość może być podana w nawiasach Eg- nazwa char (20)
(
i )
są nawiasami, a nie nawiasami.
(
i )
wsporniki i wielu Brytyjczyków prawdopodobnie nie zdają sobie nawet sprawy, że są dialekty języka angielskiego, w którym słowo „nawias” może odnosić się do znaku interpunkcyjnym. Należy zdecydować się na preferowanie „nawiasów” zamiast „nawiasów” - prawdopodobnie jest to maksymalnie jasna opcja przy docieraniu do międzynarodowej grupy programistów - ale jest to bardziej skomplikowany przypadek niż „nawiasy” po prostu mylne.