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

Do I need utf8mb4 charset for storing geocoding address.components long_names?

我正在开发一个应用程序,全世界的人都可以在搜索框中输入地址、城市或其他内容。然后他们可以 select 匹配他们目标的结果。 selected 结果包含来自 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" ]

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

"King's Street"

"Newport"

"Staffordshire"

进入我的数据库。

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

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

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

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

评论暗示真正的问题是关于 3 字节 utf8 和 4 字节 utf8mb4大小。 (我假设您使用的是 VARCHARTEXT?

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

所以,你也可以对所有内容使用 utf8mb4。

除MySQL以外的所有应用,"UTF-8"指的是变长编码;它甚至可以超过 4 个字节(尽管还没有为字符分配超过 4 个字节的代码)。