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.
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
2 replies on “Como escrever strings incluindo aspas e caracteres especiais no MySQL”
É com data como devo colocar.
Tenho esse código:
CREATE PROCEDURE data_frases;
BEGIN;
DECLARE var_data DATE;
DECLARE var_dia VARCHAR(50);
DECLARE contador INT DEFAULT 0;
SET var_data=data_inicio;
SET var_dia=DAYNAME(data_inicio2)
WHERE contador < intervalo DO
INSERT INTO tbpdodia(data_inicio2, dias_semanas)VALUES
(var_data, var_dia);
SET contador=contador +1;
SET var_data=DATE_ADD(data_inicio2,INTERVAL contador DAY);
SET var_dia=DAYNAME(var_data);
END WHILE;
END $$
CALL data_inicio2(`2024-01-01`, 365);
Mensagem de erro:
Erro
Comando SQL: Copiar
CREATE PROCEDURE data_frases;
Mensagens do MySQL : Documentação
#1064 – Você tem um erro de sintaxe no seu SQL próximo a '' na linha 1
Boa!! Usando ADODB com Access funcionou substituindo por duas aspas simples. O banco entendi como uma só. Obrigado pela dica.