mysql-escape-characters-tutorial-cover

Como escrever strings incluindo aspas e caracteres especiais no MySQL

Se você tiver alguma dificuldade de digitar queries MySQL, por conterem caracteres especiais ou aspas simples, conheça algumas maneiras de contornar o problema.
O assunto já foi abordado no artigo Como incluir caracteres especiais e valores NULL nas consultas MySQL. Sugiro sua leitura, caso as informações dadas aqui não sejam suficientes.
Teclado luminoso azul

Aspas simples e apóstrofos no MySQL

Este tipo de caractere pode causar problemas, não somente, para usuários e desenvolvedores de língua portguesa — mas também aos de língua inglesa, que é o idioma original dos criadores deste banco de dados.

Na programação de computadores, uma cadeia de caracteres ou string é uma sequência de caracteres, geralmente utilizada para representar palavras, frases ou textos de um programa.
— Wikipedia.

As aspas simples podem ser usadas para envolver strings no MySQL, para indicar que a aquela sequência não é um comando, cláusula ou algum parâmetro de execução.
O caractere de “aspa” também é usado como apóstrofo e aí a confusão começa — quando o sistema “imagina” que aquele seja um sinal de início de uma string e fica esperando que uma “segunda aspa” apareça para indicar o fim.

I’m here!

Faça o teste, dentro do cliente MySQL.

SELECT "Santa Bárbara d'Oeste";

Quando tudo está bem, o comando SELECT não irá retornar erro:

+------------------------+
| Santa Bárbara d'Oeste  |
+------------------------+
| Santa Bárbara d'Oeste  |
+------------------------+
1 row in set (0.00 sec)

No exemplo, que segue, um “apóstrofo” atrapalhou o outro.

SELECT 'Santa Bárbara d'Oeste';
    '> ';

O cliente MySQL não entendeu a presença de 3 aspas simples:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '';
'' at line 1

O problema, acima, pode ser resolvido com o uso de uma ‘\’ (barra):

SELECT 'Santa Bárbara d\'Oeste';
+------------------------+
| Santa Bárbara d'Oeste  |
+------------------------+
| Santa Bárbara d'Oeste  |
+------------------------+
1 row in set (0.00 sec)

Entenda melhor o uso dos caracteres de escape no MySQL, neste artigo.
Em vez do caractere \, é possível duplicar as aspas. observe:

SELECT 'Santa Bárbara d''Oeste';
+------------------------+
| Santa Bárbara d'Oeste  |
+------------------------+
| Santa Bárbara d'Oeste  |
+------------------------+
1 row in set (0.00 sec)

O caractere de acentuação pode ser usado como aspas simples — mas deve ser evitado, uma vez que sua aplicabilidade varia de acordo com o teclado em uso.

Uma string é uma sequência de bytes ou caracteres envoltos por aspas simples (‘) ou duplas (“).
— Documentação do MySQL.

Se quiser que as aspas sejam exibidas e façam parte da sua string, usa-as duplicadas ou faça uso do caractere de escape ‘\’:

SELECT "Ela disse ""Olá!""", "E eu disse \"Oi!\"";
+-------------------+------------------+
| Ela disse "Olá!"  | E eu disse "Oi!" |
+-------------------+------------------+
| Ela disse "Olá!"  | E eu disse "Oi!" |
+-------------------+------------------+
1 row in set (0.00 sec)

A própria ‘\’ (barra) é um caractere especial. É chamada de caractere de escape por que tem o efeito de retirar temporariamente uma string das regras de processamento normais. Portanto, para conseguir fazer uso da barra literalmente, você precisa duplicá-la:

SELECT 'No Windows, o MySQL fica instalado em C:\\mysql';
+------------------------------------------------+
| No Windows, o MySQL fica instalado em C:\mysql |
+------------------------------------------------+
| No Windows, o MySQL fica instalado em C:\mysql |
+------------------------------------------------+
1 row in set (0.00 sec)

Outras sequencias de escape reconhecidas pelo MySQL

  • \b — corresponde ao backspace delete.
    SELECT 'No W\bindows, o MySQL fica instalado em C:\\mysql';
  • \n — Insere uma linha.
  • \r — Equivale ao Return ou Enter — insere um parágrafo.
  • \t — Insere um caractere de tabulação.
  • \0 — insere um caractere ASCII NULL.

Faça suas próprias experiências e descubra mais sobre o que pode ou não ser feito na hora de fornecer suas próprias strings ao MySQL.

Referências:

Tipos de dados no MySQL: https://elias.praciano.com/2014/01/mysql-tipos-de-dados/
Strings e cadeias de caracteres, na Wikipedia: http://pt.wikipedia.org/wiki/Cadeia_de_caracteres
Uso das aspas, na Wikipedia: http://pt.wikipedia.org/wiki/Aspas#Representa.C3.A7.C3.A3o_correta_das_aspas
Documentação oficial do MySQL String literals: https://dev.mysql.com/doc/refman/5.1/en/string-literals.html

Publicado por

Elias Praciano

Autor de tecnologia (livre, de preferência), desenvolvedor web e geek, nos mais diversos assuntos. Entusiasta de software livre e hacker de LEGO, acredito em repassar meu conhecimento e ajudar as pessoas sempre que for possível.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *