我是否需要 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
的 大小。 (我假设您使用的是 VARCHAR
或 TEXT
?
- 对于英语,没有区别 -- 在 utf8 或 utf8mb4 中每个字符占用 1 个字节。 大小和编码都不同。
- 对于欧洲,没有区别 -- 每个字符占用 1 或 2 个字节。
- 对于大多数亚洲语言来说,没有区别 -- 每个字符恰好占用 3 个字节。
- 对于中文,有一个问题 -- 一些 中文字符需要 4 个字节,将此类数据存储在
utf8
列中会导致截断或其他错位。
所以,你也可以对所有内容使用 utf8mb4。
除MySQL以外的所有应用,"UTF-8"指的是变长编码;它甚至可以超过 4 个字节(尽管还没有为字符分配超过 4 个字节的代码)。
我正在开发一个应用程序,全世界的人都可以在搜索框中输入地址、城市或其他内容。然后他们可以 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
的 大小。 (我假设您使用的是 VARCHAR
或 TEXT
?
- 对于英语,没有区别 -- 在 utf8 或 utf8mb4 中每个字符占用 1 个字节。 大小和编码都不同。
- 对于欧洲,没有区别 -- 每个字符占用 1 或 2 个字节。
- 对于大多数亚洲语言来说,没有区别 -- 每个字符恰好占用 3 个字节。
- 对于中文,有一个问题 -- 一些 中文字符需要 4 个字节,将此类数据存储在
utf8
列中会导致截断或其他错位。
所以,你也可以对所有内容使用 utf8mb4。
除MySQL以外的所有应用,"UTF-8"指的是变长编码;它甚至可以超过 4 个字节(尽管还没有为字符分配超过 4 个字节的代码)。