Actually I just miss that he doesn't state anything about the downsides of UTF-8. Like that you need to go through the string to determine how many characters it has, due to their (potentially) variable length.
Why not link to that in the first place?
If it would overflow, you just set the long to the max size, byte the bullet and read the entire string. If you are using a dynamic language just throw whatever InfinitelyLargeNumber class it has in the size column and you're good.
If you're worried about ram that much you can just use plain strings when you need to.
You have to do that with all Unicode encodings, since a semantic symbol can be composed of multiple combining characters.