• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Saco

Caracteres non-Ascii (utf8)

7 mensagens neste tópico

Ora bem, é o seguinte:

Tenho a seguinte tabela em MySql:

CREATE TABLE `palavra` (
  `id` int(11) NOT NULL default '0',
  `palavra` varchar(100) NOT NULL default '',
  PRIMARY KEY  (`id_palavra`,`nota`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

Nesta tabela tenho uma entrada (1,'olá!') e outra (2,'ola'). Até aqui tudo bem.

Agora tenho as seguintes queries em PHP:

$sqlquery = "SELECT * FROM palavra WHERE palavra = 'olá!';";
$sqlquery2 = "SELECT * FROM palavra WHERE palavra = 'ola';";

A primeira não me devolve resultados, enquanto que a segunda devolve a entrada (2,'ola'), tal como seria de esperar. Alguém me sabe explicar o que é que está mal aqui?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isto do characters encoding pode ser tramado...!

Experimenta o seguinte:

$sqlquery = 'SELECT * FROM palavra WHERE palavra = "'.utf8_encode('olá!').'";';

deve resolver o problema.

EDIT: pequeno erro, faltava-me umas aspas.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Entretanto descobri qual era o meu problema. É que a base de dados não estava em utf8, assim, apesar de a tabela ter o campo em utf8, a coisa dava barraca, não sei porquê.

@RayBack: também ponderei essa hipótese, mas isso ia aumentar bastante o espaço ocupado pela BD, já que os caracteres non-ascii transformam-se em 8 ascii. Numa BD com poucas entradas pode não ser muito, mas numa BD com 1.3 milhões de entradas como é o caso da minha... ainda são uns MBzitos.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

podes experimentar fazer um

mysql_query('SET NAMES "utf8");

antes de emitir queries, acho que funciona correctamente mesmo não tendo a base de dados em UTF-8.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

podes experimentar fazer um

mysql_query('SET NAMES "utf8");

antes de emitir queries, acho que funciona correctamente mesmo não tendo a base de dados em UTF-8.

Também me disseram isso, mas experimentei e não deu enquanto não meti a base de dados em UTF-8... Também podia estar a fazer outra coisa qualquer mal mas... não me parece.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Também não tenho a certeza, mas acho que tem de ser usado juntamente com o utf8_encode(), penso que só por si não funciona... É daquelas coisas que já me deram muitas chatices, mas nunca me dei ao trabalho de investigar a fundo! :/

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora