For example, L+1 bytes to store a TINYTEXT value before MySQL 4.1 becomes L characters + 1 byte to store the length as of MySQL 4.1.
Do you mean TINYTEXT can holds 255 characters from 4.1 onwards?
It does not seem the case when I tested it, it holds 255 bytes only and not 255 characters, the difference occurs when multibyte character set is used for the TINYTEXT column, exampe utf8, the limits is 255 bytes and not 255 characters when characters longer than 1 byte is stored into the field.
Truncation occurs when I try to insert a string of 100 3-byte characters.
Truncation does not occur when I use VARCHAR(255), it can hold 100 3-byte characters with total byte length of 300 bytes.
Mixing the definition of bytes and characters is not good and confusing with multibyte characters. Maybe the table needs to be updated too. L is stated as bytes in CHAR and VARCHAR in the table.
http://dev.mysql.com/doc/mysql/en/storage-requirements.html