Ir para conteúdo
Fórum Script Brasil
  • 0

Problema com o Charset


turha

Pergunta

Olá,

Estou com um problema sério e não consigo resolver. Será que alguém me poderia ajudar?

Depois de mudar de servidor os títulos dos meus conteúdos ficaram com o caracteres especiais trocados. O estranho é que isto só aconteceu com os títulos e não com os conteúdos dos textos. Existe algum comando que eu possa fazer para permitir o dump da base de dados com determinadas configurações e depois importar novamente a BD com outras configurações que resolva o assunto.

Os títulos ficaram assim: Tratamento Cromoterápico - Câncer de Mama

Reparei que se eu copio este título para o bloco de notas do windows e gravo com a configuração ANSI, quando abro o ficheiros os acentos ficam correctos, mas como corrijo isto na BD?

Obrigado.

Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0

Que linguagem de programação você usa?

No caso do PHP, você pode usar as funções utf8_encode() ou uft8_decode() nas strings, sem ter de mexer no BD. Qual das duas usar vai depender da collation do banco de dados. Testa uma. Não funcionando, você testa a outra.

Creio que ASP também tenha funções similares.

Editado por granito
Link para o comentário
Compartilhar em outros sites

  • 0

Oi,

Obrigado pela resposta...

Poderei experimentar, mas isso implicaria ter que mexer em muitos ficheiros para alterar, pois não são apenas artigos, mas também tópicos do fórum, e outros...

Se existisse uma forma de alterar isso na BD seria o ideal...

Obrigado

Oi,

Experimentei e funcionou com o decode, mas surgiu um outro problema... é que os registos antigos que vieram do outro servidor ficaram bem, mas os novos registos já adicionados neste desconfiguraram...

Teria que ser uma solução directamente na BD que pudesse converter tudo, não sei como fazer...

Alguém tem alguma ideia?

Obrigado...

Link para o comentário
Compartilhar em outros sites

  • 0

Se entendi bem, os novos registros feitos após a mudança de server estão sendo guardados com caracteres inválidos. Seria isso? Ou talvez, somente até os caracteres acentuados? Estou supondo isso porque já passei por esse problema.

Qual o charset da página? Qual a collation do BD? Qual a collation da coluna?

Veja o que acontece se você adicionar a linha de código abaixo logo após o mysql_connect() no arquivo de conexão com o banco.

mysql_query("SET NAMES 'utf8'");

Link para o comentário
Compartilhar em outros sites

  • 0

Oi,

Os títulos dos conteúdos que estavam no servidor antigo ficaram com os caracteres acentuados errados no novo servidor. Mas as novas entradas colocadas já no novo servidor ficam com os acentos normais, sem problema. Quando eu apliquei o utf_decode, as entradas antigas ficaram bem e as novas mal...

A collation usada é a mesma tanto no antigo como novo e é latin1_sweden_cs (não tenho de memória se esta bem escrito)

Um abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Certo, entendi. Acho que sei o que está acontecendo.

Acesse a tabela (via phpmyadmin, ou algo assim) e verifique se as entradas anteriores à mudança de servidor estão corretamente acentuadas. Creio que não estejam.

<SE-EU-ESTIVER-CERTO> quanto à isso, creio que a única solução seja criar um script para

- acessar os dados antigos,

- tratá-los com utf8_decode e então

- fazer um UPDATE na tabela.

Uma alternativa seria fazer as correções manualmente. Mas acho que você não vai querer fazer isso. :P

</SE-EU-ESTIVER-CERTO>

Talvez haja uma outra forma, mas se há, desconheço.

Um abraço.

Editado por granito
Link para o comentário
Compartilhar em outros sites

  • 0

Manualmente não, por favor... :-))

Poderei criar esse script, mas como é que eu faço a distinção entre as antigas e as novas?

Ou seja algo do tipo: Se o conteúdo tiver os caracteres errados usa o decode e faz o update, se estiver tudo bem, não faz nada.

Um abraço...

Link para o comentário
Compartilhar em outros sites

  • 0

'turha'

O mysql tem uma função que talvez possa te ajudar.

Faça um select usando como no exemplo abaixo e vê se dá certo:

SELECT CONVERT(meucampo USING utf8)
FROM minhatabela;

Link para o comentário
Compartilhar em outros sites

  • 0

As entradas de sua tabela não tem registro de data? Tendo um fórum, imagino que sim.

Se sim, o MySQL usa o padrão de data americano, então você pode usar esse código, ou algo parecido:

$mes = "mm";
$ano = "aaaa";
$dia = "dd";
$query = mysql_query("SELECT * FROM tabela WHERE data_coluna<'$ano-$mes-$dia'");
while($row==mysql_fetch_array($query)){
     // aqui você passa os valores em $row[] para as strings, usando $utf8_decode() nos campos necessários, e então faz o UPDATE
}
Mas só execute isso aí depois de ter desfeito isso
SELECT CONVERT(meucampo USING utf8)
FROM minhatabela;

, ou as coisas podem piorar.

Se não tiver registros de data, você pode ver de que id a que id vão as entradas com valores que foram alterados e então, fazer a $query pelo campo 'id'.

EDIT: corrigida a query SELECT

Editado por granito
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...