Jeśli masz na myśli: „Czy istnieje kara za zadeklarowanie rozmiaru pola większego niż jakiekolwiek wartości, które są w nim faktycznie zapisane?”, To tak długo, jak jest on deklarowany jako varchar, odpowiedź brzmi „nie”. Każdy silnik SQL DB, który znam, przechowuje tylko liczbę znaków faktycznie podanych w danych (plus wartość długości). Jeśli więc zdefiniujesz pole jako varchar (100), ale zapiszesz w nim tylko 10 znaków, to zajmie tylko 10 znaków na dysku (plus 2 bajty dla długości). W razie wątpliwości rutynowo robię moje pola varcharowe absurdalnie duże.
Jeśli masz na myśli „Czy istnieje kara za przechowywanie długich pól postaci”, odpowiedź brzmi „tak”. Dzisiejsze miejsce na dysku jest tanie, ale nie jest darmowe, więc nie chcesz go marnować bez powodu. Prawdopodobnie ważniejsze jest, że odczyt danych z dysku zajmuje trochę czasu, więc im dłuższe są pola danych, tym wolniej działa program. Jeśli pole jest indeksowane, może to naprawdę spowolnić pobieranie, ponieważ każde czytanie będzie musiało porównać kluczową wartość z tym dużym, długim polem.
Pamiętaj, że jeśli dasz użytkownikowi pole do wprowadzania dużych danych, użyje go wcześniej lub później.
To powiedziawszy, pomyliłbym się po stronie zbyt dużej, a nie zbyt małej. Miejsce na dysku jest na tyle tanie, że nie chcesz zmuszać użytkowników do wymyślania skrótów w locie, ponieważ nie mogą zmieścić rzeczywistych danych w dostępnym polu. System, nad którym dziś pracuję, ma pole opisu produktu, które jest zbyt małe dla wielu prawdziwych nazw naszych produktów, więc użytkownicy muszą skracać. I oczywiście każdy użytkownik skraca inaczej, więc mamy dwadzieścia różnych sposobów, aby powiedzieć to samo.