【问题标题】:Aerospike charset utf8 settingAerospike 字符集 utf8 设置
【发布时间】:2017-10-24 09:43:59
【问题描述】:

我在 aerospike 中插入一条记录。在我的本地环境中一切正常。但是,在暂存环境中,UTF-8 字符未正确存储。

aql> 从 test.msges 中选择 msg

LIST('["{"message_id":"kxwFZHVBKj","title":"คำถามได้รัภšà¸à¸²à¸£à¸•à¸à¸šà¸à¸¥à¸±à¸šà¹à¸¥à¹‰à¸§!","actions": | +-------------------------------------------------- -------------------------------------------------- -------+ 1 行(0.038 秒)

此外,这是使用非常 UTF-8 安全的 golang clinet 完成的,即没有字节到字符串或字符串到字节转换的问题,这在本地运行良好,因此 我假设这与 aerospike 配置或版本有关。我本地的 aerospike 版本是 3.14.1.1,暂存版本是 3.9.1.1。

根据这篇文章中的 c-client cmets,我注意到的另一件事是,在我的本地机器上,我得到了以下 aql 版本:

Aerospike 查询客户端版本 3.13.0.1 C 客户端版本 4.1.6

但在遥控器上我有以下内容:

Aerospike 查询客户端版本 3.9.1.2

缺少 C 客户端版本!

任何人都可以帮助我在这里缺少什么配置(或其他)?

【问题讨论】:

  • 它看起来像 utf-8 被输出为单个字符编码。
  • 您的语言环境是什么? IE。 locale 在那里打印什么?
  • LANG= LC_CTYPE=POSIX LC_NUMERIC="POSIX" LC_TIME="POSIX" LC_COLLATE="POSIX" LC_MONETARY="POSIX" LC_MESSAGES="POSIX" LC_PAPER="POSIX" LC_NAME="POSIX" LC_ADDRESS= "POSIX" LC_TELEPHONE="POSIX" LC_MEASUREMENT="POSIX" LC_IDENTIFICATION="POSIX" LC_ALL=
  • 在我的本地机器上,语言环境是 en_US.utf-8。我认为这可能是问题所在。但是我在本地机器上更改了我的语言环境,并希望我能在本地重现问题,但字符仍然很好:(
  • aql 是一个 C 应用程序,它在下面运行 C 客户端。您是否通过 golang 客户端检索 msg bin 来检查这是否不是 aql 错误?

标签: go utf-8 aerospike


【解决方案1】:

aql 是一个用c-client 编写的工具。在 c-client 中,应用程序应该处理 utf-8 编码,因为没有类似于支持多字节 utf-8 字符的新一代语言的“字符串”数据类型。读取数据的应用程序应该事先知道数据确实是用 utf-8 编码来处理的。 aql 无法确定,因为它是通用工具。因此,它最终将每个字节打印为一个字符。

【讨论】:

  • 在那种情况下,为什么我在本地机器上可以正确看到多字节字符?
  • 你能展示一下相同的查询是如何在你的本地机器上输出的吗
  • 结果包含正确的字符,例如 ามได้รับการต
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-12
  • 2018-01-15
  • 1970-01-01
  • 2016-11-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多