It may vary by implementation, but in general it determines the maximum number of characters that can be displayed in the column or the maximum that can be used in the column.
What it certainly does not determine is the amount of bytes it will occupy on the line. Texts can have encodings that a character has no direct relation to the amount of bytes being occupied. The storage of numbers will be done according to the implementation and each one may have a different consumption.
Then% w / o%, if this is possible, indicates that the number can be up to 20 digits.
A INT(20)
indicates that the text can be up to 8 characters long. Some banks allow more storage to be stored. Some will occupy 8 bytes because this type does not have multibyte encoding. But it depends on the implementation. You have to look carefully at the documentation for each system.