Want to use international languages? Sure, use utf8, it's easy and works everywhere and includes basically every character you could ever want, right? Well, except some popular databases like MySQL where utf8 doesn't actually have the full character set, and is some subset instead. Now in your app some languages will cause weird errors because the characters aren't supported and you won't know why until you dig in and find the issue and that this was considered and a character set that ACTUALLY includes the full set was created and it's called utf8mb4. And you can use it and your app works again but you scratch your head and wonder why a separate set was created when everyone knows the usual utf8 and no one would know to look further, and dig further because you're already this deep and it turns out the answer is sort of that it was convenient at the time. And if a database this popular can have such a strange seemingly broken behavior for no reason then what's going on and does anything really even work. But... then your own spaghetti code doesn't seem so bad.