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

Problemas Com Acentos No Mysql


dudanogueira

Pergunta

Pessoal!!

Alguém poderia me dar um help ae!

tenha uma listagem de nomes no meu BD, lá

os nomes estão do tipo:

Adriana

Thaís Chagas

Érica Rabelo

Eduardo Costa

daí faço imprimo a listagem com o seguinte script:

<?

$datab3 = new DB;

$query = "SELECT Nome, ID, Turma FROM Formando WHERE Turma = $IDt ORDER BY Nome";

$datab3->pquery($query);

while($datab3->next_record()){

print "<P class=\"busca_convite\"><a href=\"formandos.php\" onClick=\"MM_openBrWindow('http://www.sitetal.com.br/ver.php?id=". $datab3->record["ID"] ."','','width=400,height=300')\">". $datab3->record["Nome"] ."</a></p>\n\n";

}

?>

o único problema: ele considera o nome Érica antes de Adriana...

Link para o comentário
Compartilhar em outros sites

14 respostass a esta questão

Posts Recomendados

  • 0

Tenta fazer assim...

SELECT Nome, ID, Turma FROM Formando WHERE Turma = $IDt ORDER BY Nome ASC

fallou...

Link para o comentário
Compartilhar em outros sites

  • 0

Falae amigo!

Obrigado pela atenção! biggrin.gif

bom, o problema me parece ser quanto aos caracteres com acento.

Ele já está "ORDER BY Nome", o ASC não fez diferença.

porém Nomes que começam com acento, como Éric

aparecem antes do Adriano...

No BD, os nomes são cadastrados como

Adriana

Tha&iacute;s Chagas

&Eacute;ric Rabelo

Eduardo Costa

Eu queria que o Éric viesse junto do Eduardo, ou seja,

ele ignorasse o acento. dry.gif

tem como? ou eu teria que cadastrar no BD os nomes com acento para depois converter?

valeu ae, brigadão!

Link para o comentário
Compartilhar em outros sites

  • 0

Pois é...tá aí uma coisa que é bom saber...

estou iniciando com mysql, onde vou usar com ASP.

E sempre antes de inserir dados no bd, uso uma funcao que substitui as palavras acentuadas, como você disse ae dudanogueira.

Se alguém puder dar uma luz biggrin.gif

Link para o comentário
Compartilhar em outros sites

  • 0

Ops...aki em cima era eu... se puder, peço ao MODERADOR pra apaga-lo, e depois tirar esta frase daki!!

Pois é...tá aí uma coisa que é bom saber...

estou iniciando com mysql, onde vou usar com ASP.

E sempre antes de inserir dados no bd, uso uma funcao que substitui as palavras acentuadas, como você disse ae dudanogueira.

Se alguém puder dar uma luz

Link para o comentário
Compartilhar em outros sites

  • 0

E sempre antes de inserir dados no bd, uso uma funcao que substitui as palavras acentuadas, como você disse ae dudanogueira.

Galera...

Se vocês usarem uma função que tira os acentos já na hora de inserir no mysql, o nome do cara vai ficar sempre diferente da forma que deveria ser... eu vejo duas soluções aqui:

- Mais simples, mas eu não usaria: criar outro campo do bd com o nome sem acentos, só para fins de ordenar quando você der um SELECT.

- Ou dar um SELECT inicial no "ID" e no "Nome", retornando o resultado num array (com o índice igual ao campo "id" e o valor igual ao campo "nome"). Então, substitui os caracteres acentuados e ordena o array com o sort()... aí, em ASP eu não sei, mas em PHP seria só utilizar o foreach() (quem não conhece este comando e quiser dar uma olhada, dá uma olhada nesse link):

foreach ($array as $indice => $valor) {

    $query = "SELECT Nome, ID, Turma FROM Formando WHERE ID = $indice";

    $datab3->pquery($query);

    // comandos pra imprimir um registro...

}

Ele imprime 1 registro a cada passagem no laço foreach... fica um pouco complexo, mas se você criar uma classe que faça isso, ajuda bastante (já que você já está fazendo com orientação a objetos, mesmo). wink.gif

Se alguém tiver mais alguma idéia, posta aí...

Abraços!

Link para o comentário
Compartilhar em outros sites

  • 0
Guest - dudanogueira -

Poizé.

Eu pensei em fazer algo desse tipo (aprendi agora como, hehehe),

mas acho que é muita volta pra uma coisa... que deveria ser simples.

Eu acho que o canal deve ser jogar a informação com acento e tudo la dentro do BD

e só transformar quando for imprimir pro html...

daí ele lista tudo quase certinho, pois considera acentuados antes de tudo.

tipo

Érica

Ealância

mas já é alguma coisa.

melhor do que jogar os entities (&acutecseilaoque;) dentro do BD. e perder a referência de vez

mas o grande problema que pra fazer isso vou ter que fazer uma verdadeira

costura dentro dos meus códigos, pois já tem uma pá de registros e entrando novos a cada dia =\

vamos ver o que dá!

valeu pela ajuda ae personas, se alguém tiver mais alguma

dica sobre acentos dentro do BD, ou mesmo dicas de como trabalhar

com acentos na programação solta o verbo ae!

Link para o comentário
Compartilhar em outros sites

  • 0

beleza ae Illidan

Saquei essa do array ae, moleza!

Agora falando esta do dudanogueira, de enviar os dados pro BD com acentos normais (ex.: Éric).

De certa forma isso não traz problema, SÓ que pra facilitar a nossa porgramação, sempre fazemos tratamentos. Quando pegamos o valor de um campo de um form, um cadastro por ex., verificamos (pelo menos no asp), estas coisas:

- caracteres como o apóstrofo (') e substituimos por 2 apóstrofos (''), para evitar erro na SQL.

- usamos Server.HTMLEncode(valorASerTratado) para subsitituir as tags do HTML por códigos referentes ao mesmo, para não haver um dado, por exemplo, estar com fonte tamanho 7 em negrito (engracadinhos os kras q fazem isso).

Então sempre antes de enviar infos pro bd, fazemos isso.

Logo, as palavras acentuadas são transformadas nakeles códigoszinhos (&eacute; e etc).

Isso nos tira mtos tratamentos em outras páginas, pois se não fizermos isso, inserirmos os valores normais no bd, em todas as paginas aonde aquele dado podera ser mostrado, eu terei de usar o Server.HTMLEncode, o que seria trabalho d+ e alguns acham desnecessário.

O que vejo mesmo, é a dificuldade de ordenar os nomes corretamente se as letras acentuadas estiverem em codigo.

no mais é isso...

Link para o comentário
Compartilhar em outros sites

  • 0

,Jul 12 2004, 06:52 AM] Então sempre antes de enviar infos pro bd, fazemos isso.

Logo, as palavras acentuadas são transformadas nakeles códigoszinhos (&eacute; e etc).

Isso nos tira mtos tratamentos em outras páginas, pois se não fizermos isso, inserirmos os valores normais no bd, em todas as paginas aonde aquele dado podera ser mostrado, eu terei de usar o Server.HTMLEncode, o que seria trabalho d+ e alguns acham desnecessário.

Guto,

Entendi o que você quis dizer, mas eu não acho que seja trabalho demais você ter que tratar a informação do bd toda vez que for exibí-la. Quer dizer, eu acho que vale a pena pelos inconvenientes que isso resolve... Eu faço isso nos meus projetos. Se você transformar os caracteres HTML em seus respectivos códigos, vai ocupar mais espaço no campo do mysql (pode não ser muito, mas eu vejo como um espaço perdido). Além do mais, não é só a ordenação dos resultados que ficará comprometida, como tb se você for fazer uma busca, ou qualquer espécie de consulta... Imagine só: você teria que tratar a palavra de busca com a função Server.HTMLEncode (no PHP é a htmlentities) toda vez que fosse consultar no bd.

A meu ver, é um processo tão trabalhoso quanto tratar os dados da consulta só na hora de exibir. A diferença é que uma hora você trata a palavra que será consultada, e na outra você trata o resultado. Se pudesse optar, eu ficaria com a segunda opção, pois ocupa menos espaço no bd e evita alguns problemas, como o de ordenar resultados.

Bom, mas tb não sei como é o seu caso... é só minha opinião. smile.gif

Falou!

Link para o comentário
Compartilhar em outros sites

  • 0

É acho que vou ter de optar por usar o Server.HTMLEncode em cada parte do site onde vou printar certos dados.

Realmente uma coisa que não pensei foi esse espaço a mais no no banco.

E cara, mudando um pouco o X da questão, você acha que devemos fazer algum tratamento para palavras "especiais"?

Por exemplo, limitar estas palavras:

Drop, Create, Table, Delete, Update, Insert e outras parecidas...

Quando alguém escreve-las, informamos erro que não está palavra está restrita ou simplesmente tiramos a do texto.

Que você acha?

Desde já agradeço a sua compreensão.

t+

Link para o comentário
Compartilhar em outros sites

  • 0

Bom, Guto... eu nunca restringi essas palavras. Acho que não tem problema, não. Em PHP (em ASP eu não sei, mas acredito que seja similar), o que o cara digita num campo do form, como um <textarea>, ficará associado a uma variável quando ele submeter o formulário. Eu só pego o valor dessa variável e insiro no campo do banco. Não tem problema se ele encher de caracteres ou palavras "especiais" pelo meio... a única coisa que pode dar erro são caracteres como a aspas simples, como você citou no seu outro post.

Agora, na hora de imprimir esse valor na página, aí eu trato ele várias vezes... por exemplo, na primeira, eu mando transformar os caracteres especiais de HTML em seu código ("<" vira "&lt;" etc.)... aí eu transformo os <enters> em <br />... aí, num mural que eu criei, ele substitui quando o cara digitar ":)" por "<img src=... />" (igual aqui no fórum). Se eu fosse fazer tudo isso na hora de gravar no bd, iria ocupar muito mais espaço... cada tecla <enter> ia virar um <br />, um ":)" ia virar "<img src=... />". Tirando que, quando o cara fosse editar a mensagem, ele não ia entender nada do que era aquilo.

Mas beleza... voltando à sua pergunta sobre segurança, acredito que você não precise se preocupar caso alguém digite um "DROP `tabela`;" na mensagem... só fique atento mesmo na hora de imprimir esses valores na página pra não deixar nenhum engraçadinho alterar o tamanho da fonta pra 7, ou escrever </td></tr> e acabar com o layout do site... hehehe rolleyes.gif

Abraços!

Link para o comentário
Compartilhar em outros sites

  • 0

Ah beleza então!!!

Acho que já estava no caminho certo.

Eu já tinha pensado no espaço no BD pra estes coisas, como ENTER por <br>, emoticons pelo <img...> e td mais.

Já faço estes tratamento na hora de imprimi-los também. Não na hora de inserir.

Agora só vou colocar o Server.HTMLEncode do asp (igual aquele seu HTMLEntities do PHP) nos campos que for printar.

Abraços e muito obrigado,

t+ wink.gif

Link para o comentário
Compartilhar em outros sites

  • 0
Guest Wagner Gomes Gonçalves

Caros, o problema de ordenação no MYSQL é proveniente do Collation escolhido para a tabela (e para o banco).

Collation define o comportamento de ordenação no MYSQL.

Então faça o seguinte pra ordenação funcionar bem com acentos:

// ALTERA O CHASET E COLLATION DA TABELA - Faça para todas as tabelas

alter table formando

CHARACTER SET utf8

COLLATE utf8_general_ci

Sugiro alterar do banco também

// ALTERA O CHASET E COLLATION DO BANCO

alter database

CHARACTER SET utf8

COLLATE utf8_general_ci

Mias um comentário: Não a gambiarra...! hehehehe

Link para o comentário
Compartilhar em outros sites

  • 0
Guest Visitante

Caros, o problema de ordenação no MYSQL é proveniente do Collation escolhido para a tabela (e para o banco).

Collation define o comportamento de ordenação no MYSQL.

Então faça o seguinte pra ordenação funcionar bem com acentos:

// ALTERA O CHASET E COLLATION DA TABELA - Faça para todas as tabelas

alter table formando

CHARACTER SET utf8

COLLATE utf8_general_ci

Sugiro alterar do banco também

// ALTERA O CHASET E COLLATION DO BANCO

alter database

CHARACTER SET utf8

COLLATE utf8_general_ci

Mias um comentário: Não a gambiarra...! hehehehe

maiorçada, meu problema é um pouco parecido porém queria alterar a Collation de um campo da tabela, mas no Mysql - Front, poderia me dar um help nesta questão aí??? Meu email ramansen@gmail.com , Obrigado.

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,5k
×
×
  • Criar Novo...