Najlepszy typ pola bazy danych dla adresu URL
Muszę zapisać adres url w tabeli MySQL. Jaka jest najlepsza praktyka definiowania pola, które będzie zawierać adres URL o nieokreślonej długości?
10 answers
Http://dev.mysql.com/doc/refman/5.0/en/char.html
wartości w kolumnach VARCHAR są ciągami o zmiennej długości. Długość może być określona jako wartość od 0 do 255 przed MySQL 5.0.3, a 0 do 65,535 w 5.0.3 i nowszych wersjach. Efektywna maksymalna długość VARCHARA w MySQL 5.0.3 i nowszych zależy od maksymalny rozmiar wiersza (65 535 bajtów, który jest współdzielony między wszystkimi kolumnami) i używany zestaw znaków.Więc ...
TEXT
lub
> = MySQL 5.0.3 use VARCHAR(2083)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-20 19:55:27
VARCHAR(512)
(lub podobne) powinny być wystarczające. Ponieważ jednak tak naprawdę nie znasz maksymalnej długości adresów URL, o których mowa, mogę po prostu przejść bezpośrednio do TEXT
. Niebezpieczeństwo związane z tym to oczywiście utrata wydajności ze względu na to, że CLOB
S są znacznie wolniejsze niż prosty typ danych typu string, taki jak VARCHAR
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-20 19:31:31
varchar(max)
dla SQLServer2005
varchar(65535)
dla MySQL 5.0.3 i nowszych
Spowoduje to przydzielenie pamięci jako potrzeby i nie powinno wpływać na wydajność.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-09 21:38:57
Będziesz chciał wybrać pomiędzy tekstem lub kolumną VARCHAR na podstawie jak często będzie używany adres URL i czy rzeczywiście potrzebujesz długości, aby być niezwiązanym.
Użyj VARCHAR z maxlength >= 2,083 jak zasugerował micahwittman Jeśli:
-
W przeciwieństwie do kolumn tekstowych, Varchary są przechowywane w wierszu)
- jesteś prawie pewien, że adres URL nigdy nie przekroczy limitu wiersza 65,535 bajtów.
Użyj tekst Jeśli:
-
Adres URL naprawdę może złamać 65,535 bajtowy limit wiersza
- Twoje zapytania nie wybierają ani nie aktualizują kilku adresów URL na raz (lub bardzo często). Dzieje się tak dlatego, że kolumny tekstowe po prostu trzymają wskaźnik w linii, a losowe dostępy związane z pobieraniem danych odniesienia mogą być bolesne.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:31:33
Powinieneś używać VARCHAR z kodowaniem znaków ASCII. Adresy URL są zakodowane w procentach, a międzynarodowe nazwy domen używają punycode, więc ASCII wystarczy do ich przechowywania. Będzie to wymagało znacznie mniej miejsca niż UTF8.
VARCHAR(512) CHARACTER SET 'ascii' COLLATE 'ascii_general_ci' NOT NULL
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-18 10:00:03
Większość przeglądarek pozwoli Ci umieścić bardzo duże ilości danych w URL i w ten sposób wiele rzeczy kończy się tworzeniem bardzo dużych adresów URL, więc jeśli mówisz o czymś więcej niż domenowa część adresu URL, będziesz musiał użyć kolumny tekstowej, ponieważ VARCHAR/CHAR są ograniczone.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-20 19:33:44
To naprawdę zależy od Twojego przypadku użycia( patrz poniżej), ale przechowywanie jako TEXT
ma problemy z wydajnością, a ogromny VARCHAR
brzmi jak przesada w większości przypadków.
Moje podejście: używaj hojnej, ale nie bezzasadnie dużej długości VARCHAR
, takiej jak VARCHAR(500)
lub tak, i zachęcaj użytkowników, którzy potrzebują większego adresu URL, aby używali skrótu URL, takiego jak safe.mn
.
Podejście na Twitterze: dla naprawdę ładnego UX, zapewnij automatyczne skracanie adresów URL dla zbyt długich adresów URL i przechowuj "Wyświetl wersję" łącza jako fragment adresu URL z wielokropkami na końcu. (Przykład: http://stackoverflow.com/q/219569/1235702
będzie wyświetlany jako stackoverflow.com/q/21956...
i będzie linkował do skróconego adresu URL http://ex.ampl/e1234
)
Uwagi i zastrzeżenia
- oczywiście podejście Twittera jest ładniejsze, ale dla potrzeb mojej aplikacji, rekomendowanie skrócenia adresu URL było wystarczające.
- skróty URL mają swoje wady, takie jak kwestie bezpieczeństwa. W moim przypadku nie jest to duże ryzyko, ponieważ adresy URL nie są publiczne i nie są mocno używane; jednak to oczywiście nie będzie działać dla wszystkich. safe.mn wygląda na to, że blokuje wiele spamu i phishingowych adresów URL, ale nadal zalecam ostrożność.
- pamiętaj, że nie powinieneś zmuszać użytkowników do używania skrótu URL. W większości przypadków (przynajmniej dla potrzeb mojej aplikacji) 500 znaków jest zbyt wystarczające do tego, do czego większość użytkowników będzie go używać. używaj / polecaj tylko Skracacz URL dla zbyt długich linków.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-26 22:09:49
Nie znam się na innych przeglądarkach, ale IE7 ma limit 2083 znaków dla operacji HTTP GET . Chyba, że inne przeglądarki mają niższe limity, nie rozumiem, dlaczego potrzebujesz więcej znaków niż 2083.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-20 19:33:54
Lepiej Użyj varchar (max) Co (pod względem wielkości) oznacza varchar (65535)
.
To będzie nawet przechowywać większe adresy internetowe i pozwoli zaoszczędzić miejsce, jak również.
Specyfikacja max rozszerza możliwości przechowywania varchar, typy danych nvarchar i varbinary. varchar (max), nvarchar (max) oraz varbinary (max) są zbiorczo nazywane typami danych o dużej wartości. Możesz użyj typów danych o dużej wartości do przechowywania do 2^31-1 bajtów danych.
Zobacz to Artykuł o Technecie o używaniu typów danych o dużej wartości
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-24 12:33:44
Większość serwerów internetowych ma limit długości adresu URL (dlatego jest kod błędu "URI za długi"), co oznacza, że istnieje praktyczny górny Rozmiar. Znajdź domyślny limit długości dla najpopularniejszych serwerów internetowych i użyj największego z nich jako maksymalnego rozmiaru pola; powinno to być więcej niż wystarczające.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-20 19:50:11