Ir ao conteúdo
  • Cadastre-se

Erro script "Data truncated for column"


Posts recomendados

Bom dia!

 

Estou com um problema em uma requisição de um script que importo informações de uma DB de uma imobiliária para outra. A questão que antes, em ambiante Windows o script funcionava sem problemas, agora que estou migrando para um ambiente Linux está aparecendo a seguinte mensagem: Data truncated for column 'codigo' at row 1.

 

Acredito que seja algo relacionada as versões do PHP ou MySQL.

 

Estrutura da tabela `imoveis`
--

CREATE TABLE `imoveis` (
  `id` int(11) DEFAULT NULL,
  `codigo` int(11) DEFAULT NULL,
  `tipo` varchar(255) COLLATE latin1_general_ci DEFAULT NULL,
  `link` varchar(255) COLLATE latin1_general_ci DEFAULT NULL,
  `endereco` varchar(255) COLLATE latin1_general_ci DEFAULT NULL,
  `bairro` varchar(255) COLLATE latin1_general_ci DEFAULT NULL,
  `fotos` int(11) DEFAULT NULL,
  `finalidade` varchar(100) COLLATE latin1_general_ci DEFAULT NULL,
  `descricao` varchar(255) COLLATE latin1_general_ci DEFAULT NULL,
  `quartos` varchar(2) COLLATE latin1_general_ci DEFAULT NULL,
  `suites` varchar(2) COLLATE latin1_general_ci DEFAULT NULL,
  `banheiros` varchar(2) COLLATE latin1_general_ci DEFAULT NULL,
  `garagens` varchar(2) COLLATE latin1_general_ci DEFAULT NULL,
  `valor` varchar(10) COLLATE latin1_general_ci DEFAULT NULL,
  `latitude` varchar(100) COLLATE latin1_general_ci DEFAULT NULL,
  `longitude` varchar(100) COLLATE latin1_general_ci DEFAULT NULL,
  `cep` varchar(15) COLLATE latin1_general_ci DEFAULT NULL,
  `cidade` varchar(50) COLLATE latin1_general_ci DEFAULT NULL,
  `estado` varchar(2) COLLATE latin1_general_ci DEFAULT NULL,
  `data_atualizacao` varchar(15) COLLATE latin1_general_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
<?php 
// CONECTA AO BANCO EXTERNO
$server = 'localhost';
$banco = 'teste';
$usuario_db = 'teste';
$senha_db = 'teste';

$conexao = mysql_connect($server,$usuario_db,$senha_db) or die(mysql_error());
mysql_select_db($banco,$conexao) or die(mysql_error());

$data_atualizacao = date("d/m/Y h:i:s");

//PEGA DADOS IMOVEIS INICIAL
//////////////////////////////////////////////////

//LIMPA BANCO
$query = "DELETE FROM imoveis" ; 
mysql_query($query,$conexao) or die (mysql_error());

$url = "http://www.sicadi.com.br/i_mostra_imoveis_xml.php?codigo_imobiliaria=0206";
$cURL = curl_init($url);
curl_setopt($cURL, CURLOPT_RETURNTRANSFER, true);
curl_setopt($cURL, CURLOPT_FOLLOWLOCATION, true);
$resultado = curl_exec($cURL);
//echo utf8_encode($resultado);
curl_close($cURL);

//LIMPAR
$resultado = str_replace("<![CDATA[","",$resultado);
$resultado = str_replace("]]>","",$resultado);

//CORRIGE NOMES
$resultado = str_replace("RESID&ECIRC;NCIA","RESIDÊNCIA",$resultado);
/*$resultado = str_replace("GALP&ATILDE;O/BARRAC&ATILDE;O","GALPÃO/BARRACÃO",$resultado);
*/
$resultado = str_replace("Ã","Ã",$resultado);
$resultado = str_replace("Á","Á",$resultado);
$resultado = str_replace("á","á",$resultado);
$resultado = str_replace("Ê","Ê",$resultado);
$resultado = str_replace("Â","Â",$resultado);
$resultado = str_replace("Ç","Ç",$resultado);
$resultado = str_replace("Ó","Ó",$resultado);
$resultado = str_replace("Í","Í",$resultado);
$resultado = str_replace("º","°",$resultado);
$resultado = str_replace("&IACUTE;", "Í",$resultado);
$resultado = str_replace("&AACUTE;", "Á",$resultado);
$resultado = str_replace("&ATILDE;", "Ã",$resultado);


//PEGAR O INICIO DO IMOVEL
$inicio = strpos($resultado,"<imovel id");
$fim = strpos($resultado,"</imoveis>");

//PEGAR APENAS O QUE QUERO
$resultado = substr($resultado, $inicio, $fim); 
$im = explode('</imovel>', $resultado);

//QUANTIDADE
$qt = count($im);

//COLOCA EM BANCO

for($i =0; $i < $qt - 1; $i++){

//PEGA IMOVEIS
$imovel = $im[$i];
$imovel = str_replace("</"," ",$imovel);
$imovel = str_replace("<"," ",$imovel);
$imovel = str_replace(">"," ",$imovel);
$imovel = str_replace("codigo","id codigo",$imovel);
$imovel = str_replace('"  
     tipo','"codigo tipo',$imovel);
$imovel = str_replace('/ 
     disponibilidade',"fotos_disponiveis count disponibilidade",$imovel);	
$imovel = str_replace('valor="', 'finalidade  valor="',$imovel);
$imovel = str_replace('"fotos_disponiveis', ' valor',$imovel);

    
$id = explode('id', $imovel);
$id = str_replace('="',"",$id);
$id = str_replace('"',"",$id);
$id = utf8_decode(trim($id[1]));

$codigo = explode('codigo', $imovel);
$codigo = str_replace('="',"",$codigo);
$codigo = str_replace('"',"",$codigo);
$codigo = utf8_decode(trim($codigo[1]));

$tipo = explode('tipo', $imovel);
$tipo = str_replace('="',"",$tipo);
$tipo = str_replace('"',"",$tipo);
$tipo = utf8_decode(trim($tipo[1]));

$link = explode('link', $imovel);
$link = str_replace('="',"",$link);
$link = str_replace('"',"",$link);
$link = trim($link[1]);

$endereco = explode('endereco', $imovel);
$endereco = str_replace('="',"",$endereco);
$endereco = str_replace('"',"",$endereco);
$endereco = utf8_decode(trim($endereco[1]));

$bairro = explode('bairro', $imovel);
$bairro = str_replace('="',"",$bairro);
$bairro = str_replace('"',"",$bairro);
$bairro = utf8_decode(trim($bairro[1]));

$fotos = explode('fotos_disponiveis count', $imovel);
$fotos = trim($fotos[1]);
$fotos = str_replace('="',"",$fotos);
$fotos = str_replace('"',"",$fotos);
$fotos = str_replace('/',"",$fotos);
$fotos = substr($fotos, 0, 3); 

echo $fotos.'<br>';

$finalidade = explode('finalidade', $imovel);
$finalidade = str_replace('="',"",$finalidade);
$finalidade = str_replace('"',"",$finalidade);
$finalidade = trim($finalidade[1]);

$valor = explode('valor', $imovel);
$valor = str_replace('="',"",$valor);
$valor = str_replace('"',"",$valor);
$valor = str_replace('/',"",$valor);
$valor = trim($valor[1]);

$quartos = explode('quartos', $imovel);
$quartos = str_replace('="',"",$quartos);
$quartos = str_replace('"',"",$quartos);
$quartos = trim($quartos[1]);

$suites = explode('suites', $imovel);
$suites = str_replace('="',"",$suites);
$suites = str_replace('"',"",$suites);
$suites = trim($suites[1]);

$banheiros = explode('banheiros', $imovel);
$banheiros = str_replace('="',"",$banheiros);
$banheiros = str_replace('"',"",$banheiros);
$banheiros = trim($banheiros[1]);

$garagens = explode('garagens', $imovel);
$garagens = str_replace('="',"",$garagens);
$garagens = str_replace('"',"",$garagens);
$garagens = trim($garagens[1]);

$query = "INSERT INTO imoveis (id, codigo, tipo, link, endereco, bairro, fotos, finalidade, valor, quartos, suites, banheiros, garagens, data_atualizacao) VALUES ('$id', '$codigo', '$tipo', '$link', '$endereco', '$bairro', '$fotos', '$finalidade', '$valor', '$quartos', '$suites', '$banheiros', '$garagens', '$data_atualizacao')" ; 
mysql_query($query,$conexao) or die (mysql_error());
} 

//ATUALIZA IMOVEIS E INSERE FOTOS
//////////////////////////////////////////////////

//LIMPA BANCO
$query = "DELETE FROM fotos" ; 
mysql_query($query,$conexao) or die (mysql_error());

// LOOP EM TODOS OS IMOVEIS
$query = "SELECT * FROM imoveis";
$result = mysql_query($query,$conexao) or die(mysql_error());
while ($linha = mysql_fetch_array($result)) {
$link = $linha[link];
$url = "http://www.sicadi.com.br/".$link;

$cURL = curl_init($url);
curl_setopt($cURL, CURLOPT_RETURNTRANSFER, true);
curl_setopt($cURL, CURLOPT_FOLLOWLOCATION, true);
$resultado = curl_exec($cURL);
//echo utf8_encode($resultado);
curl_close($cURL);

//LIMPAR
$resultado = str_replace('<?xml version="1.0" encoding="ISO-8859-1"?>',"",$resultado);
$resultado = str_replace("<![CDATA[","",$resultado);
$resultado = str_replace("]]>","",$resultado);

//PEGAR O ID IMOVEL
$inicio = strpos($resultado,'<imovel id="');
$fim = strpos($resultado,'codigo=');
$id_imovel = substr($resultado, $inicio, $fim);
$id_imovel = str_replace('<imovel id="','',$id_imovel);
$id_imovel = str_replace('" c','',$id_imovel);

//PEGAR FOTOS
$resultado = str_replace('" ></foto>','src="',$resultado);
$fotos_internas = explode('src="', $resultado);
$total_fotos = count($fotos_internas) - 1;

//INSERE FOTOS
for($r=1;$r<=$total_fotos;$r +=2){
	$ft = "INSERT INTO fotos (id_imovel, foto, data_atualizacao) VALUES ('$id_imovel', '$fotos_internas[$r]', '$data_atualizacao')" ; 
	mysql_query($ft,$conexao) or die (mysql_error());
}

//PEGA CIDADE
$inicio = strpos($resultado,'<cidade>');
$fim = strpos($resultado,'<estado>');
$cidade = substr($resultado, $inicio, $fim - $inicio);
$cidade = str_replace('<cidade>','',$cidade);
$cidade = str_replace('</cidade>','',$cidade);
$cidade = trim($cidade);

//PEGA ESTADO
$inicio = strpos($resultado,'<estado>');
$fim = strpos($resultado,'<cep>');
$estado = substr($resultado, $inicio, $fim - $inicio);
$estado = str_replace('<estado>','',$estado);
$estado = str_replace('</estado>','',$estado);
$estado = trim($estado);

//PEGA CEP
$inicio = strpos($resultado,'<cep>');
$fim = strpos($resultado,'<condominio>');
$cep = substr($resultado, $inicio, $fim - $inicio);
$cep = str_replace('<cep>','',$cep);
$cep = str_replace('</cep>','',$cep);
$cep = str_replace('-','',$cep);
$cep = trim($cep);

//PEGA DESCRICAO
$inicio = strpos($resultado,'<caracteristicas>');
$fim = strpos($resultado,'<area_total');
$descricao = substr($resultado, $inicio, $fim - $inicio);
$descricao = str_replace('<caracteristicas>','',$descricao);
$descricao = str_replace('</caracteristicas>','',$descricao);
$descricao = str_replace("'","''",$descricao);
$descricao = trim($descricao);


//PEGA COORDENADA
$url = "http://maps.google.com/maps/api/geocode/json?address=$cep,$cidade,$estado&sensor=false";
$cURL = curl_init($url);
curl_setopt($cURL, CURLOPT_RETURNTRANSFER, true);
curl_setopt($cURL, CURLOPT_FOLLOWLOCATION, true);
$resultado = curl_exec($cURL);
//echo utf8_encode($resultado);
curl_close($cURL);

$inicio = strpos($resultado,'"location"');
$fim = strpos($resultado,'"location_type"');
$localizacao = substr($resultado, $inicio, $fim - $inicio);
$localizacao = explode(',', $localizacao);
$latitude = trim($localizacao[0]);
$latitude = str_replace("\n", "", $latitude);
$latitude = str_replace(" ", "", $latitude);
$latitude = str_replace('"location":{"lat":', "", $latitude);

$longitude = trim($localizacao[1]);
$longitude = str_replace("\n", "", $longitude);
$longitude = str_replace(" ", "", $longitude);
$longitude = str_replace('"lng":', '', $longitude);
$longitude = str_replace('}', '', $longitude);

//ATUALIZA DADOS IMOVEIS
$sql = "UPDATE imoveis set longitude = '$longitude', latitude = '$latitude', cep = '$cep', cidade = '$cidade', estado = '$estado', descricao = '$descricao' where id = '$id_imovel'" ; 
//echo $sql;
mysql_query($sql,$conexao) or die (mysql_error());

}
?>

 

Link para o comentário
Compartilhar em outros sites

Olá, 

 

estranho, Data truncated pelo que sei está informando que você está tentando colocar uma informação acima da capacidade limite especificada da coluna.

 

você conseguiria realizar o insert um por vez manualmente? assim você irá descobrir qual está com o problema

 

abs. 

Link para o comentário
Compartilhar em outros sites

1 hora atrás, Sayd L disse:

`codigo` int(11) DEFAULT NULL,

@Sayd LO tipo inteiro no tem uma capacidade maxima de 10 digitos , no maximo o valor 2147483647 contando com os valores negativos e sem valores negativos até 4294967295.

O campo código tem 11 digitos que no caso não cabem em um campo do tipo int , em caso do codigo como não vai utilizar ele para càlculos matemáticos pode substituir por char(11) ou varchar(11)

Link para o comentário
Compartilhar em outros sites

4 horas atrás, Fn1X disse:

Olá, 

 

estranho, Data truncated pelo que sei está informando que você está tentando colocar uma informação acima da capacidade limite especificada da coluna.

 

você conseguiria realizar o insert um por vez manualmente? assim você irá descobrir qual está com o problema

 

abs. 

Opa. Por insert eu consigo inserir um por vez, porém é em torno de 350+ registros para inserção. 


Obrigado pela resposta.

 

4 horas atrás, luscas disse:

@Sayd LO tipo inteiro no tem uma capacidade maxima de 10 digitos , no maximo o valor 2147483647 contando com os valores negativos e sem valores negativos até 4294967295.

O campo código tem 11 digitos que no caso não cabem em um campo do tipo int , em caso do codigo como não vai utilizar ele para càlculos matemáticos pode substituir por char(11) ou varchar(11)

Hum. Eu alterei aqui como informado e apresentou outro error: Data too long for column 'codigo' at row 1

 

Obrigado pela resposta.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...