有标准的 A-Z、a-z 字符,但也有连字符、破折号、引号等。
另外,还有所有国际字符,例如变音符号等。
那么,对于一个基于英文的系统来说,完整的一套是什么呢?其他语言的集合怎么样?那么 UTF8、UTF16 等呢?
额外问题:需要多少个名称字段,它们的最大长度是多少?
EDIT:人名中肯定有两种不同类型的字符,一种是作为上下文的一部分,另一种是出于结构原因。我不想限制或干扰上下文字符,但我确实需要处理结构字符。
例如,我输入了一个由破折号分隔的名称,但很难将其与减号字符区分开来。为了使系统更易于搜索,我想采用所有五种不同类型的破折号,并将它们映射到一个唯一的字符(减号),这样搜索者就不需要具体知道最初输入的是哪个符号。
问题存在于破折号,可能还有引号,还有多少其他符号?
W3C 有一篇很好的文章,叫做世界各地的人名 http://www.w3.org/International/questions/qa-personal-names这很好地解释了问题(以及可能的解决方案)(它最初是理查德·石田(Richard Ishida)的两部分博客文章:part 1 https://r12a.github.io/blog/200610#20070709 and part 2 https://r12a.github.io/blog/200707#20070716)
就我个人而言,我会说:支持每个可打印的 Unicode 字符,并且为了安全起见,仅提供包含完整格式化名称的单个字段“名称”。这样您就可以存储几乎所有形式的名称。您可能需要更加结构化的存储,但不要期望能够以结构化形式存储每个组合,因为有太多不同的组合。