Automatic deduplication (normalization) of strings in MySQL
MySQL has no such feature.

It is left to the user to "normalize" the data either for avoiding having to update multiple spots and/or for saving space.

In your example, it is generally not practical to do such with first/last name.  But it may be advisable for "locations".

It is not practical to dedup names (for example) because the payoff is poor. With "Mary" sitting somewhere else, the code has to implicitly (as you hypothecate) or explicitly (via a JOIN) reach for the string. In large datasets, this is likely to cause an extra disk hit -- costly. Also, "Mary" is 4 characters; the first_name_id might be a MEDIUMINT UNSIGNED, which is 3 bytes -- not much savings. For bigger strings that repeat a lot (company names), the tradeoffs might be better.

The main purpose of "normalization" is to put things in a single location.  A company name should be spelled out only once in a system that talks about companies.  In its place an id would be used -- possibly an integer, possibly a ticker symbol (as in a Stock database).  When the company changes its name, only one spot needs to be changed.  (If the ticker changes, as happened with AOL, then the code is messy.)