Varchar v MySQL je datový typ používaný pro ukládání textu, jehož délka může mít max 65535 znaků . Sloupce varchar v tabulce jsou z řetězec proměnné délky která může obsahovat číslice nebo znaky nebo obojí. Tento datový typ je schopen uložit pouze 255 znaků před verzí 5.0.3, ale s touto verzí a novějšími může pojmout až 65535 znaků. Může být uložen v MySQL jako a 1-byte nebo 2-byte předpona délky plus skutečná velikost.
Předpona délky určuje délku bajtu hodnoty řetězce, nikoli maximální velikost, kterou jsme nastavili. Pokud hodnoty nevyžadují více než 255 bajtů, sloupec používá předponu délky plus jeden bajt. Pokud hodnoty vyžadují více než 255 bajtů, sloupec používá předponu délky plus dva bajty.
java řetězec do pole
Maximální délka VARCHAR in MySQL podléhá maximální velikosti řádku 65 535 bajtů, která je sdílena všemi sloupci kromě sloupců TEXT/BLOB a použité znakové sady. To znamená, že celkový sloupec by neměl být větší než 65535 bajtů.
Pojďme to pochopit pomocí příkladu.
Vytvoříme dvě tabulky a pojmenujeme je Test1 a Test2. Obě tabulky obsahují dva sloupce s názvem T1 a T2. Provedením následujícího příkazu vytvořte tabulku ' Test 1 ':
CREATE TABLE Test1 ( T1 VARCHAR(32765) NOT NULL, T2 VARCHAR(32766) NOT NULL ) CHARACTER SET = 'latin1' COLLATE LATIN1_DANISH_CI;
Výše uvedený příkaz vytvořil tabulku úspěšně, protože délka sloupce T1 = 32765 plus 2 bajty a T2 = 32766 plus 2 bajty se rovná 65535 (32765+2+32766+2). Délka sloupce tedy splňuje maximální velikost řádku varchar, což je 65535.
Nyní uvidíme, co se stane, když velikost sloupce přesahuje maximální velikost varchar 65535. Proveďte níže uvedený příkaz, kde jsme zvětšili velikost sloupce T1 pro vytvoření tabulky Test2 :
CREATE TABLE Test2 ( T1 VARCHAR(32770) NOT NULL, T2 VARCHAR(32766) NOT NULL ) CHARACTER SET = 'latin1' COLLATE LATIN1_DANISH_CI;
Po provedení výše uvedeného příkazu MySQL vyvolá chybu. To znamená, že maximální velikost řádku nesmí přesáhnout 65 535 bajtů. V každém případě, pokud se zvýší, příkaz selhal a MySQL vygeneruje chybu.
řetězec zřetězení v jazyce Java
V jiném případě předpokládejme, že jsme vytvořili tabulku s názvem Test3 pomocí níže uvedeného prohlášení:
CREATE TABLE Test3 ( Id INT PRIMARY KEY AUTO_INCREMENT, Name VARCHAR(5) NOT NULL );
Dále vložte hodnoty do tabulky pomocí níže uvedeného příkazu:
INSERT INTO Test3(Name) VALUES ('Stephen');
Nyní proveďte výše uvedený příkaz. MySQL zobrazuje chybovou zprávu: Data jsou příliš dlouhá pro sloupec 'Název' na řádku 1 . Výstup to vysvětluje jasněji.
MySQL VARCHAR a prostory
MySQL nevyplňuje prostor pro hodnoty varchar, když jsou uloženy. MySQL si také ponechalo koncové mezery, když ukládalo nebo načítalo hodnoty varchar. Můžeme to pochopit pomocí následujícího příkladu, kde an vložit příkaz přidává hodnoty v název sloupec tabulky Test3 :
objekt json v jazyce Java
INSERT INTO Test3(Name) VALUES ('John ');
Dále spusťte příkaz SELECT a načtěte hodnoty.
SELECT Id, Name, length(Name) FROM Test3;
Poskytne následující výstup, kde MySQL zahrnulo koncovou mezeru do počítání délky, protože nezvětšuje délku sloupce.
hranatý materiál
Když se však pokusíme vložit hodnotu varchar s mezerami na konci, které přesahují délku sloupce, MySQL to udělá zkrátit koncové mezery. Také problémy s MySQL a Varování . Následující příklad to vysvětluje jasněji:
INSERT INTO Test3(Name) VALUES ('Peter ');
Výše uvedený příkaz vloží hodnotu, jejíž délka je šest do sloupce jméno. Hodnota je stále vložena do sloupce, ale MySQL před přidáním hodnoty zkrátí koncovou mezeru. Můžeme ověřit pomocí níže uvedeného dotazu, kde vidíme, že příkaz insert byl úspěšně přidán, ale s varováním, které dává: Data ve sloupci 'name' na řádku 1 zkrácena :
Rozdíl mezi datovým typem Char a Varchar
Datové typy char a varchar jsou oba následující ASCII znak . Jsou téměř stejné, ale liší se ukládáním a získáváním dat z databáze. Následující tabulka shrnuje základní rozdíly mezi datovým typem char a varchar:
CHAR | VARCHAR |
---|---|
Stojí na charakteru. | Znamená variabilní charakter. |
Ukládá hodnoty v pevné délce, které deklarujeme při vytváření tabulky. | Ukládá hodnoty do řetězce s proměnnou délkou s předponou o délce jednoho nebo dvou bajtů. |
Tento datový typ lze doplnit mezerou na konci, aby byla zachována zadaná délka. | Tento datový typ nelze při ukládání doplnit žádným znakem, včetně mezery. |
Nemůže obsahovat více než 255 znaků. | Pojme až 65535 znaků. |
Podporuje alokaci statické paměti. | Podporuje dynamické přidělování paměti. |