Nie wiem, o jakiej bazie piszesz, nie wiem także, jak sytuacja wygląda w przypadku wszystkich RDBM'ów, ale np. w Postgresie nie ma to większego znaczenia (odpowiadając na pytanie Czy coś takiego ma wpływ na szybkość działania
). Zobacz https://www.postgresql.org/docs/9.3/datatype-character.html - jest tam taki ciekawy fragment:
There is no performance difference among these three types, apart from increased storage space when using the blank-padded type, and a few extra CPU cycles to check the length when storing into a length-constrained column. While character(n) has performance advantages in some other database systems, there is no such advantage in PostgreSQL; in fact character(n) is usually the slowest of the three because of its additional storage costs. In most situations text or character varying should be used instead.
Dawniej używało się stałego rozmiaru żeby poprawić wydajność, było to wykonywane kosztem miejsca. Konkretnie to miejsca albo brakowało (jeśli długość varchar'a
była za niska), albo się marnowało, jeśli dane były krótsze od rozmiaru przewidzianego na nie pola (puste miejsce było dobijane zerami). Teksty z dynamiczną długością zajmowały mniej miejsca w bazie, ale ich obsługa była bardziej problematyczna. Teraz, jak widać chociażby w podanym powyżej linku, różnic w wydajności praktycznie nie ma, więc definiowanie długości pól wydaje się bezsensowne, chyba, że są jakieś inne czynniki, np. wynikające z logiki biznesowej, które to uzasadniają i o których nie wspomniałeś. Mamy za mało informacji, więc ciężko powiedzieć, czy ktoś tak zrobił bo miał powód, czy tak zrobił bo koledzy tak robią i na pewno tak trzeba ;) Ale co do wydajności - nie masz co się obawiać, ustalenie długości nie ma wpływu na prędkość działania, a jak już to może lekko ją poprawić.
W innej procedurze jest też przekazana data jako nvarchar(4000).
No to lekki absurd i to z dwóch powodów. Po pierwsze - do trzymania dat w SQL są specjalne typu chociażby timestamp
, ale nawet jakby ktoś miał ochotę trzymać to jako string, to kilkanaście znaków (zgodnie z formatem 03-07-2018
) by było wystarczające. Podejrzewam, że albo ta dawana wszędzie długość 4000 jest jakimś hackiem dającym jakiś zysk na konkretnej bazie, albo (wersja bardziej prawdopodobna) ktoś ma średnie pojęcie lub ma dużą olewkę i po prostu wszędzie wali varchar(4000)
;)