1) Names are context-sensitive, so ask for a person's name by giving the context you intend to use it in. Something like, "How should we address you in an email?" or "How should we display your name to other people on the site?".
2) Do not apply any sort of transformation to a name. Don't parse it, don't truncate it, don't lowercase it. Treat it like an opaque string and use it verbatim.
3) Databases do need limits on the length of a column (unless you use a blob...) so be generous with the width of the columns. The longest recorded name is 746 letters long (http://en.wikipedia.org/wiki/Wolfe%2B585,_Senior), so make sure it's longer than that.
4) I think the no-name case (#40) and the not-in-unicode case (#14) are fairly obscure, but if you want to handle them then then make names optional but require an avatar if they do not provide one.
5) Allow a person to change their name at any time.
There is one kind of normalisation that I think would be useful though, that is to normalise whitespace. That is trim leading and trailing whitespace, convert all whitespace to space and remove multiple spaces. Otherwise, as someone with a non-trivial surname, I agree. Facebook has always driven me insane in this regard.
I don't know if it's still the case, but Facebook used to have this annoying bug where they'd not only capitalise the first letter of my surname (incorrect!), they would then not allow for me to correct it because it seemed to have been treated case insensitively. They don't seem to enforce the capitalisation now since I've created a new account though. I know it was just a bug, but it was so disrespectful somehow.
1) Names are context-sensitive, so ask for a person's name by giving the context you intend to use it in. Something like, "How should we address you in an email?" or "How should we display your name to other people on the site?".
2) Do not apply any sort of transformation to a name. Don't parse it, don't truncate it, don't lowercase it. Treat it like an opaque string and use it verbatim.
3) Databases do need limits on the length of a column (unless you use a blob...) so be generous with the width of the columns. The longest recorded name is 746 letters long (http://en.wikipedia.org/wiki/Wolfe%2B585,_Senior), so make sure it's longer than that.
4) I think the no-name case (#40) and the not-in-unicode case (#14) are fairly obscure, but if you want to handle them then then make names optional but require an avatar if they do not provide one.
5) Allow a person to change their name at any time.