Je ne parviens pas à enregistrer des caractères non imprimables (par exemple «\ x83») dans la base de données à l'aide de Rails (v2.2).Enregistrement de caractères non imprimables dans la base de données dans Rails
Exemple simplifié (à partir de la console):
>> f = FileSpace.create({ :name => "/tmp/\x83" })
=> #<FileSpace id: 7, name: "/tmp/\203">
>> f.name
=> "/tmp/\203"
>> FileSpace.last
=> #<FileSpace id: 7, name: "/tmp/">
Vous pouvez donc voir, Rails est silencieusement la mise au rebut "\ x83" (ou "\ 203") caractère de la chaîne.
Le "\ 83" caractère est pas stocké dans la base de données:
mysql> SELECT hex(name) FROM file_spaces WHERE id=7;
+------------------------------------+
| hex(name) |
+------------------------------------+
| 2F746D702F |
+------------------------------------+
1 rows in set (0.03 sec)
mysql> select x'2F746D702F';
+---------------+
| x'2F746D702F' |
+---------------+
| /tmp/ |
+---------------+
1 row in set (0.00 sec)
Alors, comment puis-je Rails pour enregistrer le caractère non imprimable?
En outre, tout en base64 encodage/décodage fonctionnerait, je préférerais quelque chose qui fonctionne de manière plus transparente avec Rails/ActiveRecord. En d'autres termes, je ne veux pas avoir à se souvenir de base64 décoder le champ chaque fois que je le récupère de la base de données. Mais, tout cela dit, merci pour le conseil sur base64 - c'est certainement mieux que rien! :-) –
Vous pouvez remplacer setter/getter de l'attribut sur le modèle pour faire des choses de base64 pour vous – glebm