Do jakiej „reguły VARCHAR(255)” masz na myśli?
Każdy dostawca baz danych może zaimplementować VARCHAR w dowolny sposób. Zasady (i wytyczne) dla VARCHAR niekoniecznie będą takie same dla każdej bazy danych.
Jeśli chodzi o standard SQL, tak naprawdę nie zaglądałem do niego. Może być dość luźny, więc wszystkie implementacje VARCHAR są zgodne ze standardem. Jeśli standard SQL dla VARCHAR jest naprawdę rygorystyczny, to dostawcy DBMS mogą albo rozszerzyć ten standard, albo po prostu nie być zgodny. Nie sądzę, żeby rzeczywisty standard miał aż tak duże znaczenie. Liczą się rzeczywiste zasady egzekwowane przez DBMS.
Jeśli chodzi o ogólne wytyczne, określ długość VARCHAR wystarczająco długą, aby spełnić wymagania systemowe. Jeśli wymaganiem systemu jest zezwolenie na nie więcej niż 200 znaków, określiłbym długość jako VARCHAR(200)
.
Inną ogólną wytyczną jest to, że nie należy definiować długości VARCHAR, które są większe niż powinny. Kolumny VARCHAR zadeklarowane dłużej niż to konieczne może mieć wpływ na zasoby i wydajność.
Limit Oracle dla długości VARCHAR wynosi 4000 znaków. (W poprzednich wersjach Oracle maksymalna liczba wynosiła 2000. Jeśli potrzebujesz więcej niż 4000 znaków, możesz użyć CLOB
typ danych.
Limit serwera SQL do VARCHAR(8000)
, chyba że określisz VARCHAR(MAX)
co pozwala na maksymalny rozmiar (w bajtach) 2^32-1.
MySQL ma limit 65 535 dla maksymalnego limitu długości wiersza. To skutecznie ogranicza rozmiar VARCHAR do VARCHAR (21844), jeśli używasz wielobajtowego zestawu znaków, takiego jak utf8. Przy jednobajtowym zestawie znaków (takim jak latin1) maksymalna wartość to VARCHAR(65532). Jeśli potrzebujesz więcej znaków lub napotkasz limit maksymalnej długości wiersza, możesz użyć typu danych TEXT zamiast VARCHAR.
Większość implementacji DBMS VARCHAR przechowuje pole „długość” dla kolumny VARCHAR wraz z wartością. długość jest przechowywana jako liczba całkowita.
W niektórych DBMS, jeśli maksymalna długość (w bajtach) kolumny VARCHAR nie przekracza 255 bajtów, pole długości może być zaimplementowane jako jednobajtowa liczba całkowita. Jeśli kolumna pozwala na więcej niż 255 bajtów, to pole długości musi być większe niż jeden bajt.
W przypadku dynamicznych formatów wierszy, pod względem przechowywania wierszy, przechowujących 10 znaków w kolumnie, nie ma znaczenia, czy kolumna jest zdefiniowana jako VARCHAR(30) czy VARCHAR(1000). W przypadku stałych formatów wierszy miejsce na maksymalną długość kolumny zostanie zarezerwowane. Format przechowywania wierszy będzie zależał od DBMS, a w niektórych przypadkach (MySQL) od silnika przechowywania i określonego formatu wiersza.
Tak, jest rok 2016. I przeszliśmy długą drogę od wprowadzenia pierwszego komercyjnego systemu relacyjnej bazy danych.
Baza danych to tylko jedna część systemu. W aplikacji lub innych składnikach oprogramowania mogą występować ograniczenia. (Jeżeli aplikacja jest napisana w języku C, a aplikacja definiuje strukturę z tablicą bajtów dla pola, to ograniczenie rozmiaru w tym polu będzie miało znaczenie. Zwiększenie rozmiaru dozwolonego w bazie danych nie naprawi automatycznie aplikacji .
Mogą również występować limity/ograniczenia długości w kodzie JavaScript lub w elementach HTML strony internetowej. Mogą też istnieć ograniczenia innych składników oprogramowania. Na przykład niektóre naprawdę stare sterowniki ODBC SQL Server mają limit 255 znaków (bajtów?) dla kolumn CHAR i VARCHAR.
Zatem długość VARCHAR w bazie danych to tylko część historii.
Biorąc to wszystko pod uwagę, nadal nie rozumiem, co masz na myśli, kiedy pytasz
Czy możemy złamać zasadę VARCHAR(255)?
Zastanawiam się, do jakiej „zasady” mówisz. W większości znanych mi baz danych możliwe jest zdefiniowanie kolumn VARCHAR znacznie dłuższych niż 255 bajtów lub 255 znaków. A robienie tego nie łamie żadnej zasady.