segunda-feira, 21 de setembro de 2009

MySQL - Corrigindo o Evil BLOB

Problema

Bom, eu havia convertido um DBF do DBase para uma tabela do MySQL. Como estava dando erro com o campo TEXT, criei campos BLOB.
O problema que eu esqueci que havia feito isso, o sistema estava operando normalmente.
Só apareceu o problema quando resolvi migrar o site para UTF-8, o site era Latin1 (ISO-8859-1)...
Todos os campos TEXT estavam corretos, mas os campos BLOB não...
Ao tentar converter com MODIFY o erro era algo do tipo:
ERROR 1366 (HY000): Incorrect string value: '\xC7\xC3O' for column 'HIST' at row 5
O problema é que no campo BLOB estavam salvos os dados em Binário, e o MySQL não sabia o que fazer com os caracteres com acentos.
Solução usada
Rodei no PHP o seguinte código:
$mysqlA = new mysqli("localhost","user","
senha","db");
$mysqlB = new mysqli("localhost","user","senha","db");
$sql = "SELECT * FROM table";
$queryA = $mysqlA->query($sql);
while ($line = $queryA->fetch_array(MYSQL_ASSOC))
{
 $histnew = $mysqlB->real_escape_string(utf8_encode($line["HIST"]));
 $ID = $line["TableID"];
 $sql = "UPDATE table SET HIST = \"$histnew\" WHERE
TableID = $ID";
 $mysqlB->query($sql);
}
Depois de executá-lo, rodei o seguinte código no MySQL:
ALTER TABLE tbllancamentos MODIFY HIST TINYTEXT
E pronto, os acentos estavam corretos bastando apenas escolher o charset pelo MySQL no PHP...

Nenhum comentário: