2017-06-19 1 views
-2

Donc, j'ai un caractère utf8mb4 qui doit être sauvegardé dans une colonne dans mysql. J'ai cherché des solutions mais tout m'a dit de supprimer les caractères de 4 octets ou simplement de changer le classement ou le jeu de caractères de ma table.Enregistrer les caractères utf8mb4 dans mysql sans rien changer dans la table ou la base de données

Mais comme je l'ai vu Rails ActiveRecord l'a fait lors de sa conversion en \ U0001F4A1 et l'a sauvegardé plus tôt. Je veux savoir comment faire cela en utilisant soit ruby ​​ou d'une autre manière

Répondre

1

Réponse courte: Vous ne pouvez pas faire cela. Si vous voulez enregistrer un caractère de 4 octets dans mysql vous devez utiliser UTF8mb4

Réponse plus longue: D'une manière hacky, vous pouvez enregistrer des caractères comme ça avec la sérialisation. Supposons que votre modèle est Foo et de la colonne où vous permettant d'économiser 4 byte character est bar, vous aurez quelque chose comme:

class Foo < ActiveRecord::Base 
    serialize :bar 
end 

C'EST bidouillage. Cela fonctionnera, mais vous devrez sérialiser tous les autres enregistrements existants (sinon vous demandez des problèmes). Vous avez joué avec des idées comme ça tout en essayant de soutenir des emojis sur une base de données UTF8 héritée et, malheureusement, en plus d'opter pour UTF8mb4, il n'y a pas d'autre moyen de s'y prendre.

Une autre alternative si vous n'êtes intéressé que traiter emojis est utiliser quelque chose comme emojimmy

+0

Je l'ai converti à utf8mb4 de ma table de charset, mais cela ne change rien, je reçois toujours la même erreur que précédemment , serialize a fonctionné, cependant comme vous l'avez dit, c'est un peu un hack, donc je ne le ferai pas à moins que ce soit totalement nécessaire – akabhirav

+0

@akabhirav Avez-vous également mis à jour votre fichier database.yml pour utiliser utf8mb4 au lieu de utf8? Selon http://blog.arkency.com/2015/05/how-to-store-emoji-in-a-rails-app-with-a-mysql-database/ – TomD

+0

J'ai changé le jeu de caractères pour une seule table, est-il possible de faire des changements dans database.yml pour une seule table? – akabhirav