Vous utiliserez généralement des entiers plutôt que des varchars car ils consomment moins d'espace, ont un schéma de tri bien compris et sont rapides à indexer, etc. Les entiers sont des types de données naturels d'un processeur, et donc les performances sont généralement optimales. En général, un entier fait 4 octets, ce qui équivaut à seulement 4 caractères dans un varchar (non unicode).
Si vous craigniez de manquer d'espace avec un type INT, essayez BIGINT, qui vous donne des nombres à 8 octets. La limite est assez énorme, et vous manquerez probablement d'espace disque avant d'atteindre cette limite d'enregistrements :-) Les performances de BIGINT vont également être très bonnes, d'autant plus que de nombreux serveurs sont désormais également 64 bits. .
La réponse à la première partie de votre question sur ce qui se passe lorsque vous manquez d'INT n'est pas simple, surtout comme vous l'avez dit sans changer le type de données en BIGINT. Fondamentalement, vous ne pouvez pas faire grand-chose et ce que vous pouvez faire est très limité par la nature des données de votre base de données. Quels enregistrements ont une clé étrangère pour ces données? Avez-vous toujours besoin de toutes les données de cette table et des enregistrements associés? En supposant que vous puissiez archiver une grande partie des données initiales (et ses données associées), la seule chose que je peux suggérer est de déplacer les données hors de la table (disons les 1 à X premiers enregistrements), puis réinitialiser la graine d'identité à 1. Il y a toutes sortes de raisons que je ne recommanderais pas - par exemple, il y a beaucoup de bits de code que j'ai vu qui font des choses comme vérifier la valeur maximale d'un champ id, pour voir ce qui vient d'être ajouté, et cela ne fonctionnerait pas (et ne devrait pas être fait). De plus, les gens supposent que l'enregistrement N a été créé avant N + 1. Pas de réponse facile je pense.
Enfin, je ne sais pas pour MySQL, mais SQL Server donnerait une erreur de débordement si vous atteigniez la limite.