the (8) in mysql means different things when it's on the end of a numeric type than on the end of a text type. I'm not even sure it means anything on the end of an int type though:
(This is with V3.23.58 btw.)
mysql> create table test (id int(8), id2 char(8));
Query OK, 0 rows affected (0.00 sec)
mysql> insert into test values (123456789,'abcdefghij');
Query OK, 1 row affected (0.00 sec)
mysql> insert into test values
(123456789012,'abcdefghijklm');
Query OK, 1 row affected (0.00 sec)
mysql> insert into test values
(1234,'abcde');
Query OK, 1 row affected (0.00 sec)
mysql> select * from test;
+------------+----------+
| id | id2 |
+------------+----------+
| 123456789 | abcdefgh |
| 2147483647 | abcdefgh |
| 1234 | abcde |
+------------+----------+
3 rows in set (0.00 sec)
Note that MySQL doesn't pad the char(8) the way you would normally expect, and the (8) limit on the int type has no measurable effect. the trailing (8) on a number type in mysql is for the resolution of the display of the parts of the number after the decimal point, which ints don't have.
note that most other databases have no idea of a type like int(8), so it's also non-portable.
In terms of speed, an int is almost always faster, but to trump that, the database is usually not the bottleneck, it's usually the code that sits in front of it that causes performance problems.