PHP/MySQL Codificacao - Problemas com charset
Saudações turma, boa tarde!
Ontem, avançando na reescrita da base dos meus sistemas para melhorias, me deparei com um problema, outrora nunca ocorrido, durante a comunicação com o SGDB.
Estou recebendo o seguinte erro, tratado pela minha classe mysql, durante as rotinas de comunicação que involvem texto acentuado:
SGDB [ 1366 ] erro!Método MYSQL::consulta A última consulta ao servidor [ localhost ] falhou (Incorrect string value: '\xE3o enc...' for column 'fimMotivo' at row 1)
Informação adicional:
UPDATE sessao SET duracao = "10:08:26", expirada = true, fim = "2013-02-01 14:30:27", fimMotivo = "Sessão encerrada pelo sistema, por inatividade (21:30:27), conforme configurações.", regStatus = false WHERE reg = 1
Informações úteis:
>
PHP 5.5 | php.ini:
1) default_charset = "iso-8859-1"
- ja tentei desativar, comentando a linha
- ja tentei usar o valor uft-8
MySQL 5.5 | my.ini:
1) default-character-set=utf8
- não alterei ainda
2) character-set-server=utf8
- não alterei ainda
3) 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 | C:\Program Files\MySQL\MySQL Server 5.5\share\charsets\
| collation_connection | utf8_general_ci
| collation_database | utf8_general_ci
| collation_server | utf8_general_ci
| completion_type | NO_CHAIN
| concurrent_insert | AUTO
| connect_timeout | 10
+--------------------------+---------------------------------------------------------+
.
CMD.exe | chcp
Página de código ativa: 850
- ja tentei vários valores e, sem sucesso, mantive latin (850)
Ambiente HTML de execução:
<!DOCTYPE html>
<HTML>
<HEAD>
<title><?php echo sisNome(true); ?></title>
<base href="<?php echo $_SIS['url']['baseURL'].'/'; ?>">
<!-- METAS -->
<meta charset="ISO-8859-1">
<meta name="keywords" content="">
<meta name="description" content="">
<meta name="robots" content="noindex,nofollow">
<meta name="rating" content="general">
<meta name="copyright" content="IPis <info@ipis.com.br> ©2000-<?php echo date('Y'); ?>">
<meta name="author" content="Fernando Lima <fernando.r.lima@hotmail.com>">
<meta name="language" content="pt-br">
<meta name="apple-mobile-web-app-capable" content="no">
<meta http-equiv="cache-control" content="private">
<meta http-equiv="pragma" content="private">
<!-- SCRIPT -->
<noscript><meta http-equiv="refresh" content="0; url='sis/erro/java.exe'"></noscript>
<script src="sis/js/index.js"></script>
<!-- CSS -->
<link rel="stylesheet" href="<?php echo $_SIS['url']['tema'].'/midia/css/base.css'; ?>">
<link rel="stylesheet" href="<?php echo $_SIS['url']['tema'].'/midia/css/tema.css.php?nav='.textoSEO($_UA['nav']).'&so='.textoSEO($_UA['so']); ?>">
</HEAD>
<BODY class="body texto" id="Interno">
<?php
sessoesAtivas(); // FUNCAO QUE ESTOU TESTANDO
?>
</BODY>
</HTML>
Trecho da função sessoesAtivas() que chama o evento do erro:
// encerramento: inatividade
$validacao = defined('SESSAO_Validar_Inatividade') ? SESSAO_Validar_Inatividade : false;
if ( $validacao )
{ $hora = $_TP->hora();
$atividadeHora = $_TP->tempoHora($_sessao['atividade']);
$expiraMinutos = defined('SESSAO_Expira') ? SESSAO_Expira : 120;
$expiraHora = $_TP->hora($_TP->tempoTS(0, $atividadeHora, 0, '00:'.$expiraMinutos.':00'));
$expiraDif = $_TP->horaDif($expiraHora, $hora, true);
$expiraTempo = $_TP->hora($expiraDif);
if ( $expiraDif > 0 ) // hora maior que o a hora da atividade + tempo de expiracao
{ $encerra = sessaoEncerrar($_sessao['reg'], 4, $expiraTempo);
if ( !$encerra['e'] ) $_evento[] = array('hora' => $hora, 'evento' => 'Sessão [ '.formataCodigo($_sessao['reg']).' ] encerrada após '.$expiraTempo.' de inatividade.');
}
}Trecho da função sessaoEncerrar(), consulta, onde ocorre o erro:
$_sessao = $_DB->registro();
// variaveis
$horaInicio = $_TP->tempoHora($_sessao['inicio']);
$horaFim = $_TP->hora();
$duracao = $_TP->horaDif($horaInicio, $horaFim);switch ($motivoID) {
case 5: $motivo = 'Sessão encerrada pelo sistema, por limite de tempo ('.$parametro.' minutos), conforme configurações.'; break;
case 4: $motivo = 'Sessão encerrada pelo sistema, por inatividade ('.$parametro.'), conforme configurações.'; break;
case 3: $motivo = 'Sessão encerrada pelo sistema, por data anterior a atual, pela validação de sessões ativas.'; break;
case 2: $motivo = 'Sessão encerrada pelo sistema, por duplicidade, conforme configurações.'; break;
case 1: $motivo = 'Sessão encerrada pelo usuário.'; break;
case 0:
default: $motivo = '';
}
// encerramento
$sqlExpiracao = $motivoID == 4 || $motivoID == 5 ? 'expirada = true' : 'expirada = false';
$sql = 'UPDATE '.TAB_Sessao.'
SET duracao = "'.$duracao.'", '.$sqlExpiracao.', fim = "'.$_TP->tempoUS().'", fimMotivo = "'.$motivo.'", regStatus = false
WHERE reg = $0';$con = $_DB->consulta($sql, array($reg)); // AQUI OCORRE O ERRO
É isso, alguém pode dar uma luz?
Já não sei mais o que fazer pra tentar resolver este problema com o charset, hauhauahua.
Até já reconfigurei o mysql (Instance Wizard) mas sem sucesso.
[]'s
Esqueci de postar a estrutura da tabela:
> CREATE TABLE IF NOT EXISTS `sessao` (
`reg` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`id` tinytext COLLATE utf8_unicode_ci,
`ip` tinytext COLLATE utf8_unicode_ci,
`so` tinytext COLLATE utf8_unicode_ci,
`navegador` tinytext COLLATE utf8_unicode_ci,
`data` date DEFAULT NULL,
`tipo` tinytext COLLATE utf8_unicode_ci,
`usuario` tinytext COLLATE utf8_unicode_ci,
`inicio` datetime DEFAULT NULL,
`atividade` datetime DEFAULT NULL,
`fim` datetime DEFAULT NULL,
`fimMotivo` text COLLATE utf8_unicode_ci,
`duracao` time NOT NULL DEFAULT '00:00:00',
`expirada` tinyint(1) NOT NULL DEFAULT '0',
`expiracao` datetime DEFAULT NULL,
`regStatus` tinyint(1) NOT NULL DEFAULT '1',
`regPesquisa` tinyint(2) unsigned NOT NULL DEFAULT '0',
`regFiltro` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`reg`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=3 ;Discussão (5)
Carregando comentários...