我是否需要utf8mb4字符集来存储地理编码address.components long_names?

时间:2016-06-30 18:53:02

标签: mysql google-maps-api-3 unicode character-encoding google-geocoding-api

我正在开发一个应用程序,世界各地的人们在搜索框中输入地址,城市或其他内容。然后他们可以选择与目标匹配的结果。选定的结果包含address.components long_name中的文本。

地理编码器API返回的一些示例:

"long_name" : "King's Street",
"short_name" : "King's St",
"types" : [ "route" ]

"long_name" : "Newport",
"short_name" : "Newport",
"types" : [ "postal_town" ]

"long_name" : "Staffordshire",
"short_name" : "Staffordshire",
"types" : [ "administrative_area_level_2", "political" ]

在这种情况下我会例如商店:

  

“国王街”

     

“纽波特”

     

“斯塔福德”

进入我的数据库。

然后......此应用程序可以存储来自所有国家/地区的位置,也可能存储在这些国家/地区使用的所有官方本地语言 - 谷歌中的“long_name”字符串。 请注意,我在地理编码器中设置了国家/地区和语言,以便以用户的母语显示地图,以及以正确的语言为用户返回结果(address.components字符串)。

有人知道在MySql中使用UTF-8(即3字节UNICODE)时是否可以精确存储address.components long_names(字符集),或者我是否需要使用utf8mb4字符集(4- byte UNICODE)?

如果我需要使用utf8mb4字符集,那是什么原因? Google Geocoder存储哪些语言需要utf8mb4(4字节)UNICODE,以便在存储到数据库时不会丢失任何字符/语言信息?

2 个答案:

答案 0 :(得分:1)

如果您的应用程序是绿地工作(新应用程序)并且您使用的是最新版本的MySQL或MariaDb,则应使用utf8mb4。它将处理Unicode中的所有内容,包括一些模糊的字符集,并且您不必再考虑这个问题。

答案 1 :(得分:0)

评论意味着真正的问题是关于3字节utf8和4字节utf8mb4 size 。 (我假设您使用的是VARCHARTEXT

  • 对于英语,没有区别 - 每个字符在utf8或utf8mb4中占用1个字节。 大小和编码都不相同。
  • 对于欧洲,没有区别 - 每个字符需要1或2个字节。
  • 对于大多数亚洲语言而言,没有区别 - 每个字符只需要3个字节。
  • 对于中文,有一个问题 - 某些中文字符需要4个字节,将这些数据存储在utf8列中会导致截断或其他错误。

所以,你也可以使用utf8mb4来处理所有事情。

除MySQL之外的每个应用程序," UTF-8"指可变长度编码;它甚至可以超过4个字节(尽管尚未为任何字符分配超过4个字节的代码)。