【发布时间】:2012-03-28 22:41:48
【问题描述】:
我正在尝试使用 Erlang 将来自 iPhone 客户端应用程序的文本(带有表情符号)存储在 MySQL 数据库中。 (进入 varchar 列)
我曾经使用 C++ 和 mysqlpp 完成的套接字连接服务器来做这件事,它工作得很好。 (这是完全相同的数据库,所以 我可以假设问题不是来自数据库)
但是,出于可扩展性的原因,我决定在 Erlang 上传递所有内容,因为我无法正确存储和检索表情符号。
我正在使用 emysql 与我的数据库进行通信。
当我存储时,我将此列表发送到数据库:
[240,159,152,130]
当我检索时,我得到了什么:
<<195,176,194,159,194,152,194,130>>
显然有一些相似之处,我们可以在两条线上看到 159、152 和 130,但没有看到 240。我不知道 195、176 和 194 是从哪里来的。
我想在创建连接池时更改 emysql 编码。
emysql:add_pool(my_db, 3, "login", "password", "db.mydomain.com", 3306, "MyTable", utf8)
但我似乎可以找到适合 utf32 编码的原子。 (有趣的是我没有在 C++ 和 mysqlpp 上设置任何编码,它是开箱即用的)。
我做了一些测试...
storing from C++, retrieving from C++ (Works fine)
storing from Erlang, retrieving from Erlang (Does not work)
storing from Erlang, retrieving from C++ (Does not work)
storing from C++, retrieving from Erlang (Does not work)
更多信息,我在 Erlang 上使用准备好的语句,而我不在 C++ 上
任何帮助将不胜感激。
根据要求,这里是存储数据的查询:
UPDATE Table SET c=? WHERE id=?
真的很简单……
【问题讨论】:
-
向我们展示您从 Erlang 端发送到数据库的查询。准确地向我们展示您打算写入数据库的内容。
VARCHAR2我假设持有一个字符串,但您正在发送一个 erlang 列表!!!!向我们展示更多。 -
我很确定 Erlang 中的字符串是列表(带有可打印字符)...不是吗?
-
Erlang 中的字符串可以是列表或二进制文件或两者的组合。
-
但是,他发送的内容:
[240,159,152,130]根本不是可打印字符的列表,不幸的是:) -
我已将 SQL 连接的编码语言设置为 latin1,因为一切正常。
标签: mysql encoding erlang emoji