Jaki jest odpowiednik varchar (max) w MySQL?
Maksymalna długość varchar zależy od maksymalnego rozmiaru wiersza w MySQL, który wynosi 64 KB (nie licząc bloków BLOB):
VARCHAR(65535)
Pamiętaj jednak, że limit jest niższy, jeśli używasz zestawu znaków wielobajtowych:
VARCHAR(21844) CHARACTER SET utf8
Oto kilka przykładów:
Maksymalny rozmiar wiersza to 65535, ale varchar zawiera również bajt lub dwa do zakodowania długości danego ciągu. Więc właściwie nie możesz zadeklarować varchar o maksymalnym rozmiarze wiersza, nawet jeśli jest to jedyna kolumna w tabeli.
mysql> CREATE TABLE foo ( v VARCHAR(65534) );
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs
Ale jeśli spróbujemy zmniejszyć długości, znajdziemy największą, która działa:
mysql> CREATE TABLE foo ( v VARCHAR(65532) );
Query OK, 0 rows affected (0.01 sec)
Teraz, jeśli spróbujemy użyć wielobajtowego zestawu znaków na poziomie tabeli, okaże się, że liczy on każdy znak jako wiele bajtów. Łańcuchy UTF8 niekoniecznie używają wielu bajtów na ciąg, ale MySQL nie może zakładać, że ograniczysz wszystkie przyszłe wstawienia do znaków jednobajtowych.
mysql> CREATE TABLE foo ( v VARCHAR(65532) ) CHARSET=utf8;
ERROR 1074 (42000): Column length too big for column 'v' (max = 21845); use BLOB or TEXT instead
Pomimo tego, co powiedział nam ostatni błąd, InnoDB nadal nie lubi długości 21845.
mysql> CREATE TABLE foo ( v VARCHAR(21845) ) CHARSET=utf8;
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs
Ma to sens, jeśli obliczysz, że 21845 * 3 = 65535, co i tak nie zadziałałoby. Podczas gdy 21844 * 3 = 65532, co działa.
mysql> CREATE TABLE foo ( v VARCHAR(21844) ) CHARSET=utf8;
Query OK, 0 rows affected (0.32 sec)
DEFAULT
wartość dla kolumny. Nie można tego zrobić z typami TEXT lub BLOB.TEXT
limit długości to 64 KB.MEDIUMTEXT
limit długości to 16 M.LONGTEXT
limit długości to 4G.varchar(max)
typu kolumny Sql Server .TLDR; MySql nie ma równoważnej koncepcji
varchar(max)
, jest to funkcja MS SQL Server.Co to jest VARCHAR (max)?
varchar(max)
jest funkcją programu Microsoft SQL Server.Ilość danych, które kolumna mogła przechowywać w wersjach serwera Microsoft SQL starszych niż wersja 2005, była ograniczona do 8 KB. W celu zapisania więcej niż 8KB trzeba by użyć
TEXT
,NTEXT
lubBLOB
kolumny typy te typy kolumn przechowywane swoje dane jako zbiór 8K stronach oddzielone od stron danych tabeli; Obsługiwali przechowywanie do 2 GB na wiersz.Dużą zastrzeżenie do tych typów kolumn było to, że zazwyczaj wymaga specjalnych funkcji i oświadczenia do dostępu i modyfikacji danych (np
READTEXT
,WRITETEXT
iUPDATETEXT
)W SQL Server 2005
varchar(max)
wprowadzono ujednolicenie danych i zapytań używanych do pobierania i modyfikowania danych w dużych kolumnach. Dane dlavarchar(max)
kolumn są przechowywane razem ze stronami danych tabeli.Gdy dane w kolumnie MAX wypełniają stronę danych o rozmiarze 8 KB, zostaje przydzielona strona przepełniona, a poprzednia strona wskazuje na nią, tworząc połączoną listę. W przeciwieństwie
TEXT
,NTEXT
i typ kolumna obsługuje wszystkie te same semantyka zapytań jak inne rodzaje kolumn.BLOB
varchar(max)
Więc
varchar(MAX)
naprawdę znaczy,varchar(AS_MUCH_AS_I_WANT_TO_STUFF_IN_HERE_JUST_KEEP_GROWING)
a nievarchar(MAX_SIZE_OF_A_COLUMN)
.MySql nie ma odpowiednika idiomu.
Aby uzyskać taką samą ilość miejsca, jak
varchar(max)
w MySql, nadal musisz uciekać się doBLOB
typu kolumny. W tym artykule omówiono bardzo skuteczną metodę efektywnego przechowywania dużych ilości danych w MySql.źródło
varchar(max)
tak naprawdę oznacza.Maksymalna długość varchar to
65535
podzielone przez maksymalną długość bajtu znaku w zestawie znaków, na który ustawiana jest kolumna (np. utf8 = 3 bajty, ucs2 = 2, latin1 = 1).
minus 2 bajty do przechowywania długości
minus długość wszystkich pozostałych kolumn
minus 1 bajt na każde 8 kolumn, które mają wartość null. Jeśli twoja kolumna ma wartość null / not null, zostanie ona zapisana jako jeden bit w bajcie / bajtach zwanym maską zerową, 1 bit na kolumnę, która jest dopuszczalna wartości null.
źródło
Dla Sql Server
zmień tabelę prg_ar_report_colors add Text_Color_Code VARCHAR (max);
Dla MySql
zmień tabelę prg_ar_report_colors add Text_Color_Code longtext;
Dla Oracle
zmień tabelę prg_ar_report_colors add Text_Color_Code CLOB;
źródło
MySQL Konwertowanie kolumny z VARCHAR na TEXT, gdy rozmiar jest poniżej limitu !!!
źródło
Maksymalna długość varchar w MySQL 5.6.12 to 4294967295.
źródło