Jump to content


Photo

Mysql E Acentuação


  • Faça o login para participar
5 replies to this topic

#1 Jonh McLane

Jonh McLane

    Turista

  • Usuários
  • 40 posts
  • Sexo:Não informado

Posted 14/03/2008, 10:37

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?

Edição feita por: boirock, 14/03/2008, 14:18.
uso de [quote]

"Yippee-ki-yay, Motherf*cker"

#2 DarkSign

DarkSign

    Doutor

  • Usuários
  • 868 posts
  • Sexo:Masculino
  • Localidade:Brasil
  • Interesses:Tecnologias na área WEB em geral e desenvolvimento.

Posted 14/03/2008, 10:46

Você tem q observar se o charset da pagina eh o msm do mysql. É preferível que seja UTF-8 na pagina, pq o mySQL eh compativel com esse formato. Tmb tive esse problema, foi soh declarar os itens com charset latin1_swedish_ci, dae na página, tu faz:

<meta http-equiv="content-type" content="text/html"; charset="UTF-8"/>

Essa meta faz o browser renderizar com UTF-8. Isso deve resolver, pq pra mim resolveu. Ah, sim, pq eu uso linux, o padrao do charset eh utf-8, mas se tu usa o Windows, vc tem q verificar se o teu mysql tah em utf-8 e nao em ISO-9660 (axo q eh esse o numero, mas confere ae xD)

/*DarkSign*/
Não sabe por onde começar? Que tal pelas Regras ?

#3 Crab

Crab

    Da paz, mas preparado para Guerra

  • Ex-Admins
  • 2521 posts
  • Sexo:Masculino
  • Localidade:Florianópolis - SC
  • Interesses:Desenvolvimento Gráfico e Web.

Posted 14/03/2008, 11:26

cara isso aqui tá uma sopa de letrinhas literalmente

| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_results | latin1 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| collation_connection | latin1_swedish_ci |
| collation_database | latin1_swedish_ci |
| collation_server | utf8_general_ci |

hehehehe

faz assim...

deixa tudo utf-8, tanto quanto tua tabela toda ( utf8-unicode ) como tbm o meta charset do teu arquivo utf-8

Mas acredito que seu aquivo de conexão, logo após a conexão deva ser necessáriamente assim:

Exemplo: // repare o que está em negrito

define('BD_USER', 'xxxxx');
define('BD_PASS', 'xxxxx');
define('BD_NAME', 'xxxxx');

mysql_connect('localhost', BD_USER, BD_PASS);
mysql_select_db(BD_NAME);

mysql_query("SET NAMES utf8");
mysql_query("SET CHARACTER_SET utf8");



Agora se vc fizer uma busca aqui no fórum encontraá muita coisa inclusive uma resposta minha mesmo para um problema igual ao seu e que no caso fio a solução para o usuário... quem sabe pode te ajudar tbm.

(y)Até mais

#4 Jonh McLane

Jonh McLane

    Turista

  • Usuários
  • 40 posts
  • Sexo:Não informado

Posted 14/03/2008, 11:59

Estou saindo para almoçar. Quando voltar vou deletar o banco (que por enquanto so tem testes mesmo, nao vou usar alter nada.. vou criar tudo de novo) e criar novamente, colocando utf8 em tudo. No header do html vou por UTF-8. No php vou por conexao igual a sugestao do Crab. Vou mudar as variáveis character_set_client, character_set_connection tudo para utf-8 também.
Tendo sucesso ou não posto aqui o resultado hoje a tarde.
"Yippee-ki-yay, Motherf*cker"

#5 savior

savior

    Campanha [codebox], use ou morra :D

  • Usuários
  • 1229 posts
  • Sexo:Masculino
  • Localidade:Curitiba, PR - Brasil
  • Interesses:Na vida ;P

Posted 14/03/2008, 14:40

utf8_encode() / utf8_deccode()

[]'s

[lastfm] [blog]

Campanha codebox: use-a ou morra!
bfmaster_duran[at]yahoo.com.br


#6 Jonh McLane

Jonh McLane

    Turista

  • Usuários
  • 40 posts
  • Sexo:Não informado

Posted 15/03/2008, 19:27

Não deu pra postar ontem, mas meu problema continua. Olha como está meu mysql e meu banco agora
mysql> show variables like 'c%';
+--------------------------+-----------------------------------------------+
| Variable_name			| Value										 |
+--------------------------+-----------------------------------------------+
| character_set_client	 | utf8										  |
| character_set_connection | utf8										  |
| character_set_database   | utf8										  |
| character_set_filesystem | binary										|
| character_set_results	| utf8										  |
| character_set_server	 | utf8										  |
| character_set_system	 | utf8										  |
| character_sets_dir	   | h:\wamp\bin\mysql\mysql5.0.45\share\charsets\ |
| collation_connection	 | utf8_general_ci							   |
| collation_database	   | utf8_unicode_ci							   |
| collation_server		 | utf8_general_ci							   |
| completion_type		  | 0											 |

| concurrent_insert		| 1											 |
| connect_timeout		  | 5											 |
+--------------------------+-----------------------------------------------+
14 rows in set (0.00 sec)

mysql> show create database testutf;
+----------+------------------------------------------------------------------+
| Database | Create Database												  |
+----------+------------------------------------------------------------------+
| testutf  | CREATE DATABASE `testutf` /*!40100 DEFAULT CHARACTER SET utf8 */ |

+----------+------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> show create table nomes;
+-------+-----------------------------------------------------------------------
--------------------------------------------------------------------------------
---------------------+
| Table | Create Table

					 |
+-------+-----------------------------------------------------------------------
--------------------------------------------------------------------------------
---------------------+
| nomes | CREATE TABLE `nomes` (
  `id` int(11) NOT NULL auto_increment,
  `nome` varchar(255) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 |
+-------+-----------------------------------------------------------------------
--------------------------------------------------------------------------------
---------------------+
1 row in set (0.00 sec)

Tudo utf8, certo?

Meu php ta assim
<meta http-equiv="content-type" content="text/html"; charset="UTF-8"/>
<form action="bd.php" method="post" >
Nome: 
<input type="text" name="nome">
<input type="submit" value="Enviar">
</form>
<?php
header("Content-Type: text/html; charset=UTF-8",true);
/**
 * @author 
 * @copyright 2008
 */
$op = $_GET['op'];
$host = "localhost";
$login_db = "root";
$senha_db = "";
$database = "testutf";
$nome = $_POST['nome'];

	$conexao = mysql_connect($host, $login_db, $senha_db) or die(mysql_error());
	mysql_select_db($database,$conexao) or die("Erro na seleção do BD");
	mysql_query("SET CHARACTER_SET utf8");
	mysql_query("SET NAMES utf8");
	
	if ($nome) {
	$query = "insert into nomes values (NULL, '".$nome."')";
	
	$resultado = mysql_query($query,$conexao);
	}
	
	$query = "Select id, nome from nomes order by id desc limit 10";
	
	$resultado = mysql_query($query,$conexao);
	while ($linha = mysql_fetch_array($resultado)){
		echo $linha[0]." - ".$linha[1]."<br>";	
		}
?>
UTF8 para todos os lados, certo? E o problema continua.

Eu insiro "ááá" no forumlário, e quando vou ler pelo php está "ááá", mas quando vou ler no terminal está ├í├í├í.

Se eu coloco utf8_encode antes de escrever e utf8_decode antes de ler , piora. Quando eu insiro "ááá" no forumlário, vou ler pelo php está ááá, e quando dou um select no terminal está ├â┬í├â┬í├â┬í.

E outra, agora que ta tudo utf8 se eu insiro 'ááá' pelo terminal ele da um warning: | Warning | 1366 | Incorrect string value: '\xA0\xA0\xA0' for column 'nome' at row 1 e não insere nada nos caracteres acentuados. Sera que tem a ver com utf8_general_ci e utf8_unicode_ci?

Edição feita por: Jonh McLane, 15/03/2008, 19:40.

"Yippee-ki-yay, Motherf*cker"




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq