<p>Is there a measurable performance difference between using INT vs. VARCHAR as a primary key in MySQL? I'd like to use VARCHAR as the primary key for reference lists (think US States, Country Codes) and a coworker won't budge on the INT AUTO_INCREMENT as a primary key for all tables. </p>

<p>My argument, as detailed <a href="http://database-programmer.blogspot.com/2008/01/database-skills-sane-approach-to.html#rule1" rel="noreferrer">here</a>, is that the performance difference between INT and VARCHAR is negligible, since every INT foreign key reference will require a JOIN to make sense of the reference, a VARCHAR key will directly present the information.</p>

<p>So, does anyone have experience with this particular use-case and the performance concerns associated with it?</p>

For short codes, there's probably no difference.  This is especially true as the table holding these codes are likely to be very small (a couple thousand rows at most) and not change often (when is the last time we added a new US State).
For larger tables with a wider variation among the key, this can be dangerous.  Think about using e-mail address/user name from a User table, for example.  What happens when you have a few million users and some of those users have long names or e-mail addresses.   Now any time you need to join this table using that key it becomes much more expensive.