Aos que não querem ler muito, explico resumido: quando insiro algo pelo php num banco mysql, ele exibe correto via php mas exibe com problemas de acentuacao no terminal. Quando insiro algo diretamente no banco pelo terminal, ele exibe correto no terminal mas quando recupero pelo php os acentos saem errados. Sei que trata-se de algo relacionado aos charsets, mas não estou conseguindo resolver.
Aos que preferem mais detalhes, explico:
Não consigo entender o que está errado. Só falta esse pequeno ajuste pra colocar no ar, já quebrei a cabeça e não sei resolver. Tomara que alguém me ajude.
Tenho uma tabela que possui entre outros campos númericos, varchars dessa forma descritos:
| id_imovel | int(10) unsigned | NULL | NO | PRI | NULL | auto_increment
| nome | varchar(255) | utf8_unicode_ci | NO | | |
insert into tb_imoveis values (NULL, 'Açaí do João', 'Atrás do Sótão',2,2)
+--------------+-----------+
| nome | id_imovel |
+--------------+-----------+
| Açaí do João | 1858 |
+--------------+-----------+
Porém caso eu insira pelo php com algo como
$query = "insert into tb_imoveis values (NULL, 'Açaí do João', 'Atrás do Sótão',3,3)";
$resultado = insereBD($query);
e depois consulte pelo terminal aparecem problemas de acentuação
+--------------+-----------+
| nome | id_imovel |
+--------------+-----------+
| AþaÝ do JoÒo | 1859 |
+--------------+-----------+
Se agora eu consultar esses dados pelo php o resultado aparece lindamente no navegador. Estou fazendo algo como:
$query = "Select nome from tb_imoveis where id_imovel=1859";
$resultado=acessaBD($query);
$linha = mysql_fetch_array($resultado);
echo $linha['nome'];
Pelo que eu tenho pesquisado, acredito que o problema é que o mysql está usando um charset e o php (ou o apache, não sei) esta usando outro. Porem, como ajeito? Eu tentei deletar o banco de dados, e criei um todo latin1 pra ve se resolvia, mas nesse caso passou a exibir errado tanto ná página em php quanto no banco de dados. O banco "todo latin1" a que eu me refiro eu criei assim:
CREATE TABLE `tb_imoveis` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`nome` VARCHAR( 255 ) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL ,
`endereco` VARCHAR( 255 ) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL
) ENGINE = innodb CHARACTER SET latin1 COLLATE latin1_swedish_ci;
Pergunta
Guest johnmclane
Aos que não querem ler muito, explico resumido: quando insiro algo pelo php num banco mysql, ele exibe correto via php mas exibe com problemas de acentuacao no terminal. Quando insiro algo diretamente no banco pelo terminal, ele exibe correto no terminal mas quando recupero pelo php os acentos saem errados. Sei que trata-se de algo relacionado aos charsets, mas não estou conseguindo resolver.
Aos que preferem mais detalhes, explico:
Não consigo entender o que está errado. Só falta esse pequeno ajuste pra colocar no ar, já quebrei a cabeça e não sei resolver. Tomara que alguém me ajude.
Tenho uma tabela que possui entre outros campos númericos, varchars dessa forma descritos:
| id_imovel | int(10) unsigned | NULL | NO | PRI | NULL | auto_increment
| nome | varchar(255) | utf8_unicode_ci | NO | | |
| endereco | varchar(255) | utf8_unicode_ci | NO | | |
Meu banco está assim:
mysql> show create database db_respeito;
+-------------+----------------------------------------------------------------------+
| Database | Create Database |
+-------------+----------------------------------------------------------------------+
| db_respeito | CREATE DATABASE `db_respeito` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+-------------+----------------------------------------------------------------------+
1 row in set (0.00 sec)
Se eu entrar no terminal e inserir algo como:
insert into tb_imoveis values (NULL, 'Açaí do João', 'Atrás do Sótão',2,2)
+--------------+-----------+
| nome | id_imovel |
+--------------+-----------+
| Açaí do João | 1858 |
+--------------+-----------+
Porém caso eu insira pelo php com algo como
$query = "insert into tb_imoveis values (NULL, 'Açaí do João', 'Atrás do Sótão',3,3)";
$resultado = insereBD($query);
e depois consulte pelo terminal aparecem problemas de acentuação
+--------------+-----------+
| nome | id_imovel |
+--------------+-----------+
| AþaÝ do JoÒo | 1859 |
+--------------+-----------+
Se agora eu consultar esses dados pelo php o resultado aparece lindamente no navegador. Estou fazendo algo como:
$query = "Select nome from tb_imoveis where id_imovel=1859";
$resultado=acessaBD($query);
$linha = mysql_fetch_array($resultado);
echo $linha['nome'];
Pelo que eu tenho pesquisado, acredito que o problema é que o mysql está usando um charset e o php (ou o apache, não sei) esta usando outro. Porem, como ajeito? Eu tentei deletar o banco de dados, e criei um todo latin1 pra ve se resolvia, mas nesse caso passou a exibir errado tanto ná página em php quanto no banco de dados. O banco "todo latin1" a que eu me refiro eu criei assim:
CREATE TABLE `tb_imoveis` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`nome` VARCHAR( 255 ) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL ,
`endereco` VARCHAR( 255 ) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL
) ENGINE = innodb CHARACTER SET latin1 COLLATE latin1_swedish_ci;
Minhas variáveis do sistema estão assim:
mysql> show variables like 'c%';
+--------------------------+-----------------------------------------------+
| Variable_name | Value |
+--------------------------+-----------------------------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | h:\wamp\bin\mysql\mysql5.0.45\share\charsets\ |
| collation_connection | latin1_swedish_ci |
| collation_database | latin1_swedish_ci |
| collation_server | utf8_general_ci |
| completion_type | 0 |
| concurrent_insert | 1 |
| connect_timeout | 5 |
+--------------------------+-----------------------------------------------+
14 rows in set (0.00 sec)
O que faço? Alguém me ajuda?
Link para o comentário
Compartilhar em outros sites
3 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.