Mysql2::Erreur: Pas de chaîne de valeur
J'ai une application rails en cours d'exécution sur le mode de production, mais tout d'un coup, cette erreur est venu aujourd'hui, quand un utilisateur a tenté d'enregistrer un enregistrement.
Mysql2::Error: Incorrect string value
Plus de détails (de la production du journal):
Parameters: {"utf8"=>"â<9c><93>" ...
Mysql2::Error: Incorrect string value: '\xC5\x99\xC3\xA1k
Mysql2::Error: Incorrect string value: '\xC5\x99\xC3\xA1k
Maintenant, j'ai vu quelques solutions qui nécessitait la suppression des bases de données et de le recréer, mais je ne peux pas le faire.
Maintenant mysql montre ceci:
mysql> show variables like 'char%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.04 sec)
Quel est le problème et comment puis-je le changer donc je n'ai pas de problèmes avec les caractères?
Aussi: ce problème Est-il soluble avec du javascript? Le convertir avant de les envoyer ?
Grâce
- double possible de Mysql - Mysql2::Erreur: Pas de chaîne de valeur:
- Voir aussi ceci: dev.mysql.com/doc/refman/5.5/en/...
Vous devez vous connecter pour publier un commentaire.
le problème est causé par le charset de votre mysql côté serveur. Vous pouvez config manuellement comme:
ou de supprimer la table et de le recréer comme:
références:
https://stackoverflow.com/a/18498210/2034097
https://stackoverflow.com/a/16934647/2034097
Mise à JOUR
la première commande seulement affecter la table spécifiée, si vous voulez changer toutes les tables dans une base de données, vous pouvez faire comme
référence:
https://stackoverflow.com/a/6115705/2034097
TABLES
T, information_schema.COLLATION_CHARACTER_SET_APPLICABILITY
CCAS OÙ CCAS.collation_name = T. table_collation ET T. table_schema = "your_databasename" ET T. table_name = "your_tablename"; référence: stackoverflow.com/questions/1049728/...J'ai réussi à stocker les émoticônes (qui prendre jusqu'à 4 octets) en suivant ce post de blog:
Ensuite, j'ai dû redémarrer mon app et cela a fonctionné.
Veuillez noter que certaines émoticônes fonctionnera sans ce correctif, tandis que d'autres ne le seront pas:
utf8mb4_unicode_ci
dans votredatabase.yml
plutôt queutf8mb4_bin
?Vous pouvez utiliser une migration pour convertir vos tables utf8:
Si vous souhaitez stocker des emoji, vous avez besoin de:
1) Créer une migration (merci @mfazekas)
2) Changer de rails charset utf8mb4 (merci @selvamani-p)
Références:
https://stackoverflow.com/a/39465494/1058096
https://stackoverflow.com/a/26273185/1058096
Besoin de changer
CHARACTER SET
etCOLLATE
déjà créé la base de données:Ou il a été nécessaire de créer une base de données pré-définir les paramètres:
Il semble être un problème d'encodage lors de l'obtention des données de la base de données. Essayez d'ajouter le dessous de votre base de données.fichier yml
Espère que cela résout votre problème
Aussi, si vous ne voulez pas de faire des changements dans votre structure de base de données, vous pouvez opter par la sérialisation du domaine en question.
Juste tombé sur ça et d'apprécier @mfazekas de réponse. J'ai fait deux changements dans la migration: l'un pour accueillir la suppression de la connexion.current_database (au moins dans les Rails 5) et la capacité à ignorer les instructions SQL si vous n'utilisez pas de MySQL (j'ai encore l'utilisation de SQLite dans le développement, mais besoin de la migration à exécuter).