【发布时间】:2016-11-03 00:33:42
【问题描述】:
我正在开发一个应用程序,让世界各地的人们在搜索框中输入地址、城市或其他内容。然后他们可以选择与他们的目标相匹配的结果。所选结果包含来自 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-字节UNICODE)?
如果我需要使用 utf8mb4 字符集,那是什么原因? Google Geocoder 存储的哪些语言需要 utf8mb4(4 字节)UNICODE,以便在存储到数据库时不丢失任何字符/语言信息?
【问题讨论】:
-
任何说它是 UTF-8 的都是标准的 4 字节 UTF-8。 MySQL 是一个例外,他们最初使用 3 个字节。强烈建议您在 3byte 版本上尽可能使用
utf8mb4。 This StackOverflow Post 应该对你也很有帮助。 -
我检查了你链接到的帖子。那个人想一路支持UNICODE。我的做法有些不同。我需要支持我必须支持的东西。如果谷歌地理编码器不返回任何需要 4 字节 UTF-8 的字符集(参考地址.components long_name 中地理编码器使用的),那么我认为没有理由使用 utf8mb4 字符集,因为它会导致的唯一结果是: a) 数据库中有更多数据 b) 更大的索引再次导致查询速度变慢,并在服务器上使用更多资源。是否有任何文档显示地理编码器使用哪些字符集?
-
如果我运行这个选项,我总是会选择
utf8mb4,因为使用任何其他UTF8_MySQL 字符集只是在等待同样的问题在另一天再次出现并咬你。我不知道地理编码器使用什么,但 UTF8 现在是事实上的网络标准字符集。数据集的大小(除非它们真的很大)不会影响索引或数据检索速度。 MySQL 可以处理并超过数十亿行数据。 -
此外,如果地理编码器返回的任何数据是特定于语言环境的,例如世界偏远地区的地名,那么这些字符将在 3 字节 UTF8 存储中丢失和损坏。说真的,省去你自己的努力,在问题变成问题之前阻止它。 :-) 。使用
UTF8mb4
标签: mysql google-maps-api-3 unicode character-encoding google-geocoding-api