Skrót MD5 ma zawsze 32 znaki. Dlatego, aby zmaksymalizować wydajność, użyj CHAR (32), ponieważ CHAR ma stałą długość (zobacz odpowiedzi poniżej, aby uzyskać więcej szczegółów na temat różnic między CHAR i VARCHAR).
Augustin
Odpowiedzi:
361
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).
@steven: when Anon. mówi „Twoja treść ma stały rozmiar”, co oznacza, że wiersze tabeli muszą zawierać wszystkie pola o stałym rozmiarze. Nie uzyskasz poprawy wydajności, jeśli użyjesz CHAR przeciwko VARCHAR w jednym polu, ale tabela zawiera inne pola, które są VARCHAR.
Marco Demaio
2
brak typu danych char dodaje wydajność ... podczas wykonywania zapytania sql wygeneruje plan wykonania. Załóżmy, że istnieją 2 kolumny charcol char (2000) i VarcharCol Varchar (2000). W planie wykonania szacowany rozmiar wiersza dla kolumn typu varchar może być niedoszacowany. w ten sposób prowadzi wyciek do temp db. Zatem użycie char jest dobre dla wydajności
vignesh
1
jakie jest znaczenie wartości w nawiasie VARCHAR (n)?
Sivagami Nambi
@Marco Demaio, czy znasz przyczynę tego?
Dehan de Croos
1
@ jdc91: aby zwiększyć wydajność, cały wiersz musi mieć stałą szerokość. MySQL zyskuje przewagę, obliczając wymagania dotyczące miejsca i przesunięcia wierszy w tego rodzaju tabelach.
Marco Demaio
225
ZWĘGLAĆ
Służy do przechowywania wartości ciągu znaków o stałej długości .
Maksymalna liczba znaków, które typ danych może przechowywać to 255 znaków .
Jest o 50% szybszy niż VARCHAR.
Wykorzystuje statyczny przydział pamięci .
VARCHAR
Służy do przechowywania danych alfanumerycznych o zmiennej długości .
Maksymalnie może pomieścić ten typ danych
Pre-MySQL 5.0.3: 255 znaków .
Post-MySQL 5.0.3: 65 535 znaków udostępnionych dla wiersza.
Jestem nieco zaskoczony, że ta odpowiedź była tak często oceniana. Dokumentacja MySQL stwierdzaValues 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.
DroidOS
2
nie wspominając już o tym, że możesz przechowywać dane alfanumeryczne również w char
ninjabber,
44
Na czym polega to 50% szybciej? 50% szybciej, aby zrobić co? W jakich warunkach? A co w tym kontekście rozumiesz przez alokację pamięci statycznej vs. dynamiczną?
-1; twierdzenia dotyczące wydajności są tutaj niejasne i nieuzasadnione, różnica w strategii alokacji pamięci (i dlaczego ma to znaczenie) nie jest rozwinięta, a twierdzenie, że varchar przechowuje „dane alfanumeryczne” jest nieco dziwne; W kolumnach varchar z pewnością można również przechowywać znaki niealfanumeryczne!
Mark Amery
122
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.
Miasto = char (10), Ulica = varchar (10), miasto = Pune, ulica = Oxford, długość (miasto) = 4, długość (ulica) = 6
abdulwadood
2
to zapytanie (wybierz długość (miasto), długość (ulica) od temp) daje następujące dane wyjściowe w mysql 5,7 mysql> wybierz długość (miasto), długość (ulica) od temp; + -------------- + ---------------- + | długość (miasto) | długość (ulica) | + -------------- + ---------------- + | 4 | 6 | + -------------- + ---------------- + 1 rząd w zestawie (0,00 s)
Jasbeer Rawal
69
CHAR(x)Kolumna może mieć tylko dokładniex 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.
„Kolumna CHAR (x) może mieć tylko dokładnie x znaków.”. W rzeczywistości możesz dodawać dane z mniej niż x znakami, ale myślę, że miałeś na myśli, że zawsze RESERVES 10 scen wartych pamięci.
Dan W.
13
Nie wiesz, dlaczego przechowują skróty MD5, istnieje wiele, wiele ważnych powodów, aby używać MD5, które nie mają nic wspólnego z bezpieczeństwem. Zderzenia wcale nie są powszechne, a algorytm jest szybszy niż bezpieczniejszy.
John Hunt
1
Zakładając, że kolumna CHAR (x) nie wymusza dokładnie znaków x, czy jest jakiś powód, aby używać jej w VARCHAR (x), nawet w przypadku danych o stałym rozmiarze?
NeverEndingQueue
11
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 CHARnawet dla kolumn o zmiennej wielkości z powodu możliwego VARCHARfragmentacji 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ż BINARYzamiast 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ść.
Zgodnie z tym tokiem myślenia użyłbym CHAR dla identyfikatorów biznesowych, które mają na celu zapewnienie czytelności w porównaniu do wydajności. Nadal jednak używałbym kluczy głównych bigint.
Archimedes Trajano
9
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.
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.
Chociaż przypuszczam, że twierdzenia o szybkości i wydajności przechowywania są tutaj prawdziwe, żadne z nich nie jest w żaden sposób uzasadnione (i jest całkowicie prawdopodobne, że są fałszywe), co czyni tę odpowiedź nieprzydatną; po prostu powtarza to, co czytelnik prawdopodobnie już spodziewałby się prawdy, nie robiąc nic, co naprawdę pomogłoby to potwierdzić.
Mark Amery
1
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ć.
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 pomaga wydajności, ponieważ oszczędza miejsce ” Oszczędza miejsce, tak, ale czy nie wpływa negatywnie na wydajność? VARCHARpotrzebuje dynamicznie przydzielać pamięć, gdy jest to wymagane, a tym samym zmniejszać wydajność w przeciwieństwie do CHAR, prawda?
Spikatrix
@Spikatrix Zależy. Jeśli wartości VARCHAR są często małe, ale mogą wynosić do N bajtów, dynamiczny przydział może zaoszczędzić znaczną ilość miejsca i operacji we / wy, co jest bardziej wydajne w przypadku dużej ilości danych. Wartości CHAR, które są mniej więcej równe długości, byłyby bardziej wydajne. Odczyty i zapisy również prawdopodobnie mają znaczenie.
Andrew
-4
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)
To nie dotyczy pierwotnego pytania. OP pyta o praktyczne różnice między typami, a nie o składnię i cel typów. Także (i )są nawiasami, a nie nawiasami.
2mac
@ 2mac twoje ostatnie zdanie dotyczy tylko amerykańskiego angielskiego; w Wielkiej Brytanii nazywamy (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.
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).
źródło
ZWĘGLAĆ
VARCHAR
źródło
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
Wyjście będzie
Wniosek: Aby efektywnie wykorzystać przestrzeń dyskową, należy użyć VARCHAR Zamiast CHAR, jeśli zmienna długość jest zmienna
źródło
CHAR(x)
Kolumna może mieć tylko dokładniex
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.
źródło
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żliwegoVARCHAR
fragmentacji kolumn podczas aktualizacji.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ęcBINARY(16)
wystarczyłoby zamiastCHAR(32)
32 znaków reprezentujących cyfry szesnastkowe. Pozwoliłoby to zaoszczędzić więcej miejsca i zwiększyć wydajność.źródło
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ą.
źródło
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.
źródło
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.
źródło
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.
źródło
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ć.
źródło
według książki High Performance MySQL :
źródło
VARCHAR
potrzebuje dynamicznie przydzielać pamięć, gdy jest to wymagane, a tym samym zmniejszać wydajność w przeciwieństwie doCHAR
, prawda?Char
ma stałą długość (obsługuje 2000 znaków), oznacza, że znak jest typem danychVarchar
ma zmienną długość (obsługuje 4000 znaków)źródło
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)
źródło
(
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.CHAR:
VARCHAR:
jakieś komentarze ...... !!!!
źródło