Pytanie dotyczy głównie MS SQL w wersji 2008R2 i nowszych, ale też będę wdzięczny za info odnośnie innych baz SQL (np. MySQL, Postgress, Firebird).
Czy to prawda, że pole tekstowe lub bajtowe (varchar lub varbinary) zajmuje tyle bajtów, ile zajmuje zapisana w informacja? Jeżeli tak, to czy jeżeli są dwie takie same tabele, jedna z polami tekstowymi varchar(100), a druga z polami varchar(8000), ale obie tabele będą mieć takie same dane (wartości pól tekstowych do 100 znaków), to czy obie tabele będą zajmować tyle samo miejsca i operacje na nich tak samo wydajne? Jeżeli tak, to w jakich sytuacjach wielkość pola tekstowego ma istotne znaczenie (poza przewidywaną długością wartości pól). Wydaje mi się, że systemy baz danych, w których pole zajmuje zawsze tyle, ile maksymalna długość (np. DBase) odeszły w niepamięć.
Ponadto, w MSSQL zauważyłem, że jak się spróbuje wstawić wartość tekstową dłuższa niż długość pola, to jest komunikat "String or binary data would be truncated" i polecenie insert lub update nie wykonuje się i zrywa transakcję. Treść komunikatu można przetłumaczyć jako "Napis lub ciąg bajtowy będą obcięte", co można rozumieć, że serwer może wstawić wartość do tabeli, tylko, że będzie ona obcięta do długości pola. Jeżeli w danej aplikacji jest akceptowane obcinanie napisów przy wstawianiu do tabeli, to jak przestawić serwer, żeby on przepuszczał próbę wstawienia dłuższego napisu i wstawił obcięty bez obcinania go w aplikacji lub komplikowania danego polecenia insert lub update (na przykład w sytuacji, gdy polecenia SQL wytwarza ORM, a programista nie ma na nie wpływu)?