If you accidentally try to put string data to uint attribute (or vice-versa) through InsertAttribute (new attribute, not existing one), it will happily pass it, put it in the DB, but you won't see it in the GUI so you can't remove it without touching the DB manually.
An attempt to rewrite it with the other type will fail, because it tries to detect based on the DB contents, so it will put it in the same wrong type. It needs some handling based on None in one of the two fields.