According to this page MySQL uses 4 bytes for the field type INT and 8 bytes for the type BIGINT. But when creating columns without specifying the field length/size, MySQL sets the sizes to int(11) and bigint(20) which seems to match the maximum numbers of this field types AS STRING (INT with negative sign is 11 bytes/chars long and BIGINT with negative sign is 20 bytes/chars long).
So what exactly does the size/length of the field specify? Does it specify the chars of the value (which might not be necessary the same like the amount of bytes - e. g. for Unicode) or does it specify the real amount of bytes used depending on the field type? Is MySQL / Engine really storing integer values (and all other values) always as string representation on the disk?