Mysql e Acentuação
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 nao 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 alguem 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 eh que o mysql está usando um charset e o php (ou o apache, nao 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?
Discussão (4)
Carregando comentários...