2010-04-23 3 views
1

J'ai quelques caractères d'échappement dans les champs entrés par l'utilisateur que je ne peux pas comprendre. Je sais que ce sont les guillemets simples et doubles "intelligents", mais je ne sais pas comment les chercher dans mysql.Caractères d'échappement dans MySQL, dans Ruby

Les personnages de rubis, lorsque la sortie de Ruby ressembler \ 222 \ 223 \ 224 etc

irb> "\222".length => 1 

Alors - savez-vous comment rechercher ces derniers dans MySQL? Quand je regarde dans mysql, ils ressemblent à '?'.

Je voudrais trouver tous les enregistrements qui ont ce caractère dans le champ de texte. J'ai essayé

mysql> select id from table where field LIKE '%\222%' 

mais cela n'a pas fonctionné. Un peu plus d'informations - après avoir fait un mysqldump, voici comment l'un des caractères est représenté - '\\ xE2 \\ x80 \\ x99'. C'est la citation simple intelligente.

Finalement, je construis un fichier RTF et les caractères sortent complètement faux, donc j'essaie de les remplacer par des citations «idiotes» pour le moment. J'étais capable de faire un gsub (/ \ 222 \, "'").

Merci.

Répondre

1

Je ne comprends pas tout à fait votre problème, mais voici quelques informations pour vous:

  • D'abord, il n'y a pas échappé caractères dans la base de données. Parce que chaque personnage est stocké tel quel, sans s'échapper.
  • ils ne "regardent pas le ?". Je ne suis juste pas les paramètres du terminal. La requête SET NAMES doit toujours être exécutée en premier pour correspondre au codage du client.
  • vous devez déterminer le jeu de caractères et l'utiliser à chaque étape - dans la base de données, dans le client mysql, dans ruby.
  • vous devez distinguer la représentation des chaînes ruby ​​du caractère lui-même. Pour entrer un caractère dans la requête mysql, vous pouvez utiliser char function. Mais dans le terminal seulement. En ruby ​​il suffit d'utiliser le personnage lui-même. Les guillemets intelligents ressemblent à 2 octets codés dans l'Unicode. Vous devez d'abord déterminer votre encodage.
+0

Merci - il s'avère, cela a été causé par un mysqldump et la source ultérieure> db/backups/file.sql. Les caractères dans la base de données d'origine semblaient OK et j'étais capable de faire la vérification d'expression régulière comme d'habitude. Je n'imaginais pas que le vidage et l'importation le feraient. – Swards

Questions connexes