Varchar w MySQL to typ danych używany do przechowywania tekstu, którego długość może wynosić maksymalnie 65535 znaków . Kolumny varchar w tabeli obejmują ciąg o zmiennej długości które mogą zawierać cyfry, znaki lub jedno i drugie. Ten typ danych mógł przechowywać tylko 255 znaków przed wersją 5.0.3, ale w tej wersji i nowszych może pomieścić do 65535 znaków. Można go przechowywać w MySQL jako plik 1-bajt lub 2-bajt przedrostek długości plus rzeczywisty rozmiar.
Przedrostek długości określa długość w bajtach wartości ciągu, a nie maksymalny rozmiar, który ustawiliśmy. Jeśli wartości nie wymagają więcej niż 255 bajtów, kolumna używa przedrostka długości plus jeden bajt. Jeśli wartości wymagają więcej niż 255 bajtów, kolumna używa przedrostka długości plus dwa bajty.
Maksymalna długość VARCHAR w MySQL'a podlega maksymalnemu rozmiarowi wiersza wynoszącemu 65 535 bajtów, który jest wspólny dla wszystkich kolumn z wyjątkiem kolumn TEXT/BLOB i używanego zestawu znaków. Oznacza to, że całkowita kolumna nie powinna przekraczać 65535 bajtów.
lista_tablic.sort
Zrozumiemy to na przykładzie.
Zamierzamy utworzyć dwie tabele i nazwać je Test1 i Test2. Obie tabele zawierają dwie kolumny o nazwach T1 i T2. Wykonaj następującą instrukcję, aby utworzyć tabelę ' Próba 1 ':
CREATE TABLE Test1 ( T1 VARCHAR(32765) NOT NULL, T2 VARCHAR(32766) NOT NULL ) CHARACTER SET = 'latin1' COLLATE LATIN1_DANISH_CI;
Powyższa instrukcja pomyślnie utworzyła tabelę, ponieważ długość kolumny T1 = 32765 plus 2 bajty, a T2 = 32766 plus 2 bajty równa się 65535 (32765+2+32766+2). Zatem długość kolumny odpowiada maksymalnemu rozmiarowi wiersza varchar, który wynosi 65535.
Teraz zobaczymy, co się stanie, jeśli rozmiar kolumny przekracza maksymalny rozmiar varchar 65535. Wykonaj poniższą instrukcję, w której zwiększamy rozmiar kolumny T1, aby utworzyć tabelę Test2 :
CREATE TABLE Test2 ( T1 VARCHAR(32770) NOT NULL, T2 VARCHAR(32766) NOT NULL ) CHARACTER SET = 'latin1' COLLATE LATIN1_DANISH_CI;
Po wykonaniu powyższej instrukcji MySQL generuje błąd. Oznacza to, że maksymalny rozmiar wiersza nie może przekraczać 65 535 bajtów. W każdym razie, jeśli wzrośnie, instrukcja nie powiedzie się, a MySQL wygeneruje błąd.
W innym przypadku załóżmy, że utworzyliśmy tabelę o nazwie Test3 używając poniższego stwierdzenia:
alfabet na cyfrę
CREATE TABLE Test3 ( Id INT PRIMARY KEY AUTO_INCREMENT, Name VARCHAR(5) NOT NULL );
Następnie wstaw wartości do tabeli, korzystając z poniższej instrukcji:
INSERT INTO Test3(Name) VALUES ('Stephen');
Teraz wykonaj powyższą instrukcję. MySQL wyświetla komunikat o błędzie: Dane są za długie dla kolumny „Nazwa” w wierszu 1 . Dane wyjściowe wyjaśniają to jaśniej.
MySQL VARCHAR i spacje
MySQL nie wypełnia miejsca na wartości varchar podczas ich przechowywania. MySQL zachował również końcowe spacje, gdy zapisywał lub pobierał wartości varchar. Możemy to zrozumieć na podstawie następującego przykładu, w którym an wstaw oświadczenie dodaje wartości w Nazwa kolumna tabeli Test3 :
losowa liczba od 1 do 10
INSERT INTO Test3(Name) VALUES ('John ');
Następnie wykonaj instrukcję SELECT, aby pobrać wartości.
SELECT Id, Name, length(Name) FROM Test3;
Da to następujący wynik, w którym MySQL uwzględnił końcową spację przy zliczaniu długości, ponieważ nie zwiększa to długości kolumny.
Jeśli jednak spróbujemy wstawić wartość varchar ze spacjami na końcu, która przekracza długość kolumny, MySQL ścięty końcowe spacje. Ponadto MySQL wydaje plik a ostrzeżenie . Poniższy przykład wyjaśnia to jaśniej:
INSERT INTO Test3(Name) VALUES ('Peter ');
Powyższa instrukcja wstawia wartość, której długość wynosi sześć w kolumnie nazwa. Wartość nadal jest wstawiana do kolumny, ale MySQL obcina końcową spację przed dodaniem wartości. Możemy to zweryfikować za pomocą poniższego zapytania, w którym widzimy, że instrukcja wstawiania została pomyślnie dodana, ale z ostrzeżeniem, które daje: Dane obcięte dla kolumny „nazwa” w wierszu 1 :
Różnica między typem danych Char i Varchar
Następujące typy danych char i varchar są następujące Znak ASCII . Są prawie takie same, ale różnią się sposobem przechowywania i pobierania danych z bazy danych. Poniższa tabela podsumowuje zasadnicze różnice między typami danych char i varchar:
ZWĘGLAĆ | VARCHAR |
---|---|
To ma charakter. | Oznacza zmienny charakter. |
Przechowuje wartości w stałej długości, które deklarujemy podczas tworzenia tabeli. | Przechowuje wartości w ciągu znaków o zmiennej długości z prefiksem o długości jednego lub dwóch bajtów. |
Ten typ danych można uzupełnić spacją końcową, aby zachować określoną długość. | Ten typ danych nie może być uzupełniony żadnym znakiem, łącznie ze spacją, podczas jego przechowywania. |
Nie może zawierać więcej niż 255 znaków. | Może pomieścić do 65535 znaków. |
Obsługuje statyczną alokację pamięci. | Obsługuje dynamiczną alokację pamięci. |