Как сохранить 4-байтовый символ в MySQL 5.5 с помощью ruby ​​(mysql2 gem)

Моя проблема в том, что мой сервер API не может хранить символ, который можно отобразить на клиенте iOS. Символ 1F49D (http://shapecatcher.com/unicode/info/128157).

Сторона сервера:

  • рубин 1.9.3-p327
  • активрекорд 3.2 с mysql2
  • Сервер MySQL: 5.5.28

К вашему сведению:

  1. ранее наш клиент iOS использовал parse.com в качестве службы сохранения. Теперь мы переходим к нашему собственному API-серверу (реализованному на рубине).
  2. Когда я пытаюсь с irb. В Ruby 1.9 можно прочитать и понять этот символ.
  3. Вот текст, содержащий символ. https://gist.github.com/jacobdam/6220339/raw/1562815fe37df04293d3cee7d216e920415de715/gistfile1.txt
  4. Я изменил схему, таблицу, сопоставление столбцов на utf8 и utf16. Но это не работает.

Кто-нибудь может дать мне совет, как сохранить/получить этот текст в/из mysql?


person Jacob Dam    schedule 13.08.2013    source источник
comment
Вам нужно использовать кодировку utf8mb4 вместо utf8(mb3) (подразумевается MySQL ›= 5.5.3)   -  person julp    schedule 13.08.2013
comment
Спасибо @julp, utf8mb3 теперь работает. Можете ли вы опубликовать ответ, чтобы я мог принять ваш ответ? :)   -  person Jacob Dam    schedule 14.08.2013
comment
Ой, извини. Я пропустил опечатку. Я имел в виду utf8mb4. Мне потребовалось долгое исследование. Потому что я не уверен, что это проблема рубинового языка, или драгоценного камня mysql2, или MySQL, или AR и т. д.   -  person Jacob Dam    schedule 14.08.2013


Ответы (1)


Необходимое условие: MySQL >= 5.5.3

Набор символов с именем utf8 (или utf8mb3) использует максимум три байта на символ и содержит только символы BMP. Чтобы иметь максимум четыре байта на символ, вам необходимо:

  1. переключите кодировку/сопоставление всех ваших таблиц/столбцов на utf8mb4< /а>
  2. отредактируйте свой config/database.yml, чтобы изменить строки encoding: utf8 на encoding: utf8mb4

(и недавний гем mysql2?)

person julp    schedule 14.08.2013
comment
Ага. mysql2 гем v0.3.13. mysql2 должен быть установлен после установки mysql 5.5.3+. - person Jacob Dam; 15.08.2013