Na ogół używasz liczb całkowitych zamiast varcharów, ponieważ zajmują mniej miejsca, dobrze zrozumiały wzorzec sortowania jest szybki do indeksowania itp. Liczby całkowite są naturalnymi typami danych procesora, a zatem wydajność jest na ogół optymalna. Zazwyczaj liczba całkowita to 4 bajty, co odpowiada tylko 4 znakom w varchar (innym niż Unicode).
Jeśli martwiłeś się brakiem miejsca z typem INT, spróbuj BIGINT, który daje 8-bajtowe liczby. Limit jest dość duży i prawdopodobnie zabraknie miejsca na dysku, zanim osiągniesz ten limit rekordów :-) Wydajność BIGINT również będzie bardzo dobra, zwłaszcza, że wiele serwerów jest teraz również 64-bitowych .
Odpowiedź na pierwszą część pytania o to, co dzieje się, gdy zabraknie INT, nie jest prosta, szczególnie, jak powiedziałeś, nie zmieniając typu danych na BIGINT. Zasadniczo niewiele możesz zrobić, a to, co możesz zrobić, jest bardzo ograniczone ze względu na charakter danych w bazie danych. Jakie rekordy są obce do tych danych? Czy nadal potrzebujesz wszystkich danych w tej tabeli i powiązanych rekordach? Zakładając, że można zarchiwizować wiele początkowych danych (i powiązanych z nimi danych), jedyne, co mogę zasugerować, to przeniesienie danych ze tabeli (powiedzmy, że od 1 do X milionów rekordów), a następnie zresetowanie zarodka tożsamości do 1. Istnieje wiele różnych powodów, choć nie poleciłbym tego - na przykład widziałem wiele bitów kodu, które robią takie rzeczy, jak sprawdzanie maksymalnej wartości pola id, aby zobaczyć, co właśnie zostało dodane, a to nie zadziała (i nie powinno być zrobione). Ponadto ludzie zakładają, że rekord N został utworzony przed N + 1. Myślę, że nie ma łatwej odpowiedzi.
Wreszcie, nie wiem o MySQL, ale SQL Server dałby błąd przepełnienia, jeśli osiągnąłeś limit.