有标准的AZ,az字符,但也有连字符,em破折号,引号等.
此外,还有所有的国际角色,如变形金刚等.
那么,对于基于英语的系统,完整的设置是什么?那些其他语言的集合呢?UTF8,UTF16等怎么样?
奖金问题:需要多少名称字段,以及它们的最大长度是多少?
编辑:人名中肯定有两种不同类型的字符,那些作为上下文的一部分,以及那些由于结构原因而存在的字符.我不想限制或干扰上下文字符,但我确实需要处理结构上的字符.
例如,我有一个名字,它被一个em破折号分开,但是很难将它与减号区分开来.为了使系统更容易搜索,我想采用所有五种不同类型的破折号,并将它们映射到一个唯一字符(减号),这样搜索者就不需要具体知道最初输入的符号.
破折号也存在问题,可能还有引号,还有多少其他符号?
W3C的好文章称世界各地的个人名称很好地 解释了问题(以及可能的解决方案)(最初由Richard Ishida 撰写的两部分博客文章:第1 部分和第2部分)
我个人会说:支持每个可打印的Unicode字符并且安全地只提供包含完整格式化名称的单个字段"名称".通过这种方式,您可以存储几乎所有形式的名称.您可能需要更结构化的存储,但是不要期望能够以结构化形式存储每个组合,因为存在太多不同的存储.
如果你问我,那些可能出现在某个人姓名中的字符是错误的.当然,[A-Za-z]是一个公平的起点,但正如你所说,你会遇到"欧洲"名字的问题.所以你映射了所有的变音符号,回音符号和那些符号.中国名字怎么样?日本?印度?希伯来语?你正在与风力涡轮机进行战斗.
如果你绝对必须检查某人姓名的有效性,我建议你做一些适当的黑名单.大括号,数学字符,一些标点符号等都可以安全地忽略.但如果我是你,我会保持谨慎.
最好只接受所有内容.UTF-16应该是今天的过度杀伤字符集,在未来几年应该足够了.
编辑:关于名称长度和名称数量的问题.如果你真的希望人们写出真实而完整的名字,我想这两个问题的唯一万无一失的答案就是"无限".不能为人类扯出任何真实的例子,但肯定有类似的例子,人类作为曼谷市的本土名称.
我认为没有明确的答案.毕竟,有些人的名字甚至无法用UTF-16表达......
那里有一些奇怪的人,他们会给孩子们最疯狂的名字,包括加入奇怪的标点符号,用他们自己的语言不存在的口音等等.
但是,您可以对数据库设置任意限制.如果你愿意,你可以坚持使用7位ASCII名称.这对用户来说有点粗鲁,但他们会忍受它.它肯定使搜索更容易.
我同事的女儿名叫Amélie.但即使是一些(并非所有!)官方英国政府网站("请输入出生证明上显示的名称")也不会接受unicode,所以他必须使用'Amelie'代替.