Я пытаюсь сохранить текст (с эмодзи) из клиентского приложения iPhone в базе данных MySQL с Erlang. (В колонну варчаров)
Раньше я делал это с сервером соединений с сокетами, работавшим на 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 ++
Любая помощь будет оценена.
AS запрашивается, вот запрос для хранения данных:
UPDATE Table SET c=? WHERE id=?
Довольно просто на самом деле ...