在MySQL中存储多语言地理数据

时间:2010-01-08 12:52:25

标签: mysql utf-8 geolocation

我的应用程序需要使用地理数据来显示位置名称。我一般都非常熟悉大型复杂地理数据(例如Geonames.org),但对可能的MySQL实现并不熟悉。

我有一个四层的自定义数据集,包括每个层的lat / lon数据: - 大陆(约10) - 国家(约200) - 地区/州(约100) - 城市(约10K)

在与所有其他表的关系中,我正确地引用了四个位置名称的规范化表,允许我将这些表与其余数据分开展开。

到目前为止一直很好......用英文!

但是,我希望在我的应用程序中添加其他语言,这意味着某些位置名称也需要翻译(例如伦敦> Londres> Londre等)。它不会是OTT,也许是6种语言而不是更多。需要UTF-8。

我将使用Symfony框架的文化来处理接口转换,但我不确定如何处理位置名称,因为它们并不真正属于大量XML文件。到目前为止,我想到的解决方案是在“语言”的每个位置表中添加一列,以允许系统识别位置名称所使用的语言。

如果有人有清洁解决方案的经验或任何好的指示,我将不胜感激。感谢。

修改 进一步挖掘后,找到了symfony辅助解决方案。如果有人发现此问题,请参考:http://www.symfony-project.org/book/1_0/13-I18n-and-L10n

1 个答案:

答案 0 :(得分:2)

我不熟悉Symfony在该部门的特定功能中提供的功能。但是对于一个独立于框架的方法,如何在locality表中保留一个数据库列,保存默认名称以进行快速查找 - 具体取决于您的偏好,本地的英文名称(Kopenhagen)或本地名称(København),以及1:n其余的翻译表,链接到每个地点:

locality ID | language (ISO 639-1) | UTF-8 translation

12345       | fin                  | Kööpenhamina
12345       | fra                  | Copenhague 
12345       | eng                  | Kopenhagen
12345       | dan                  | København

这会使您的选项开放以添加无限制的语言,并且可能比每当新语言出现时向每个表添加列时更容易维护。

但是,当然,多列方法更容易以编程方式查询,并且不需要表关系 - 如果语言的数量极有可能保持有限,我可能会倾向于纯粹的懒惰。 :)