Login
Buscar
Quem está conectado
Há 47 usuários online :: 3 usuários cadastrados, 1 Invisível e 43 Visitantes :: 1 Motor de buscaelielrosa, LúcioSerrat, Tales Ruan
[ Ver toda a lista ]
O recorde de usuários online foi de 84 em 31/8/2010, 16:42
Brasília
| |
Estamos no Twitter

Nossa Comunidade

Nosso Grupo

Últimos assuntos
Top dos mais postadores
| Marcos Guedes | ||||
| hugo | ||||
| alceu11 | ||||
| marcelofazan | ||||
| Julio | ||||
| mfelis | ||||
| Tales Ruan | ||||
| Nelson Arcas | ||||
| cabeludo | ||||
| marcio |
TCC programação
31/8/2010, 17:08 por LúcioSerrat
não tenho muita pratica em programação e estou na conclusao do meu curso, necessito de alguem que po...
Comentários: 8
Criar Classe Limpas!
8/9/2010, 12:16 por mfelis
Pessoal quando define mos umas classe usamos o As. mas tem um problema ela herda das classe. e a mai...
Comentários: 0
SELECT e Botões ANTERIOR E PROXIMO.
6/9/2010, 14:22 por BrunoMesquita
Olá, queria saber se tem como ou se alguem ja fez algo parecido? É o seguinte, tenho um form onde us...
Comentários: 6
Estatísticas
Temos 1189 usuários registradosO último usuário registrado atende pelo nome de johnnyng
Os nossos membros postaram um total de 9857 mensagens em 1355 assuntos
Collations
Página 1 de 2 • Compartilhe •
Página 1 de 2 • 1, 2 
Collations
Estou com o seguinte problema.
Os campos do tipo varchar do meu banco de dados estão todos com COLLATE como 'latin1_swedish_ci'.
Só que eu notei que não consigo fazer pesquisas com algum caracter com trema, exemplo: "Müller". Ele não retorna a linha que contém esse caracter no campo.
Para simular basta criar um campo varchar com o collate 'latin1_swedish_ci' e inserir um registro com um caracter com trema. Tente fazer a pesquisa sem o trema com a "LIKE".
Se eu alterar o collate para 'latin1_german1_ci' funciona!
Eu queria saber se tem uma forma de eu alterar todas as colunas no banco com essa collate. E se tem perigo de ocorrer algum efeito não esperado nas pesquisas.
Obrigado.
Os campos do tipo varchar do meu banco de dados estão todos com COLLATE como 'latin1_swedish_ci'.
Só que eu notei que não consigo fazer pesquisas com algum caracter com trema, exemplo: "Müller". Ele não retorna a linha que contém esse caracter no campo.
Para simular basta criar um campo varchar com o collate 'latin1_swedish_ci' e inserir um registro com um caracter com trema. Tente fazer a pesquisa sem o trema com a "LIKE".
Se eu alterar o collate para 'latin1_german1_ci' funciona!
Eu queria saber se tem uma forma de eu alterar todas as colunas no banco com essa collate. E se tem perigo de ocorrer algum efeito não esperado nas pesquisas.
Obrigado.
brulec- Começando a Participar

Re: Collations
brulec fiz uns testes para simular o problema que está ocorrendo contigo, mas não tive o mesmo problema.
- De que forma você está realizando as consultas? Poderias postar um exemplo?
- Você verificou a questão de caracteres maiúsculos e minúsculos?
- Que ferramenta estais utilizando para realizar as consultas? Utilizo o MySQLQueryBrowser e através do mesmo pude verificar que as palavras chegam corretamente e minhas consultas obtiveram sucesso.
Eu não lhe aconselharia realizar uma alteração deste tipo em seu banco, principalmente se ele já conter dados, pois poderá interferir em algumas coisas.
Se irás começar algo a partir do zero, então acredito não haver problemas.
Só que eu notei que não consigo fazer pesquisas com algum caracter com trema, exemplo: "Müller". Ele não retorna a linha que contém esse caracter no campo.
- De que forma você está realizando as consultas? Poderias postar um exemplo?
- Você verificou a questão de caracteres maiúsculos e minúsculos?
- Que ferramenta estais utilizando para realizar as consultas? Utilizo o MySQLQueryBrowser e através do mesmo pude verificar que as palavras chegam corretamente e minhas consultas obtiveram sucesso.
Eu queria saber se tem uma forma de eu alterar todas as colunas no banco com essa collate. E se tem perigo de ocorrer algum efeito não esperado nas pesquisas.
Eu não lhe aconselharia realizar uma alteração deste tipo em seu banco, principalmente se ele já conter dados, pois poderá interferir em algumas coisas.
Se irás começar algo a partir do zero, então acredito não haver problemas.

Marcos Guedes- Webmaster

Re: Collations
Marcos, estou usando o like, e o problema ocorre sim. ex:
select * from pessoa where nome like "%Muller%"
Obs.: Note que a pesquisa está sem trema. Mas pela expressão like deveria trazer tbm, mas não traz...já testei com outras pessoa e o problema ocorre mesmo.
select * from pessoa where nome like "%Muller%"
Obs.: Note que a pesquisa está sem trema. Mas pela expressão like deveria trazer tbm, mas não traz...já testei com outras pessoa e o problema ocorre mesmo.
brulec- Começando a Participar

Re: Collations
Brulec, creio que você está enganado.
A seguinte expressão:
Devolverá todos os registros da tabela pessoa, onde existe, em algum lugar, no campo nome a palavra "Muller".
Neste caso, "Muller" é diferente de "Müller", em alguns casos também é diferente de "MULLER" ou "MuLLer". E por aí vai...
De acordo com a linguagem que você esteja usando para acessar o banco, o ideal seria você criar uma função/método para tratar palavras com acentos.
Espero ter esclarecido sua dúvida!
A seguinte expressão:
- Código:
select * from pessoa where nome like "%Muller%"
Devolverá todos os registros da tabela pessoa, onde existe, em algum lugar, no campo nome a palavra "Muller".
Neste caso, "Muller" é diferente de "Müller", em alguns casos também é diferente de "MULLER" ou "MuLLer". E por aí vai...
De acordo com a linguagem que você esteja usando para acessar o banco, o ideal seria você criar uma função/método para tratar palavras com acentos.
Espero ter esclarecido sua dúvida!

Marcos Guedes- Webmaster

Re: Collations
Marcos quando voce usa o like ele ignora os acentos, pode testar pesquisa uma pálavra que tenha acento (exceto o trema) sem o acento, ele acha também.
brulec- Começando a Participar

Re: Collations
Você tem razão, Brulec!
Fiz uns testes e apenas o trema não é devolvido.
Pelo que pesquisei até o momento, a única solução seria criar uma função para retirar acentos e utilizá-la no SELECT.
Continuarei pesquisando, mas se desejares utilizar função, segue dois exemplos os quais você poderá converter para a linguagem que você está utilizando.
Javascript:
http://forum.programacaobrasil.com/javascript-f45/funyyees-yteis-t61.htm?sid=2f1f68089ce8cb5328e1406f0d760851#101
ASP Clássico:
http://forum.programacaobrasil.com/asp-f3/funyyees-yteis-t60.htm#98
Fiz uns testes e apenas o trema não é devolvido.
Pelo que pesquisei até o momento, a única solução seria criar uma função para retirar acentos e utilizá-la no SELECT.
Continuarei pesquisando, mas se desejares utilizar função, segue dois exemplos os quais você poderá converter para a linguagem que você está utilizando.
Javascript:
http://forum.programacaobrasil.com/javascript-f45/funyyees-yteis-t61.htm?sid=2f1f68089ce8cb5328e1406f0d760851#101
ASP Clássico:
http://forum.programacaobrasil.com/asp-f3/funyyees-yteis-t60.htm#98

Marcos Guedes- Webmaster

Re: Collations
Bom dia Marcos, mas não entendi como posso utilizar uma função dessas no select, pois a pesquisa já é feita sem acento, o problema é o item pesquisado que está no banco, esse não tem como ignorar o acento. Você tentou depois utilizar o tipo 'latin1_german1_ci' ? Deu certo daí né?
T+
T+
brulec- Começando a Participar

Re: Collations
Não mudei para latin1_german1_ci porque creio que você já esteja com sua tabela preenchida, então não seria uma boa trocar para esta opção pois poderia lhe causar problemas no registro e também nas consultas futuramente.
Estais usando que linguagem para acessar o banco mysql?
Estais usando que linguagem para acessar o banco mysql?

Marcos Guedes- Webmaster

Re: Collations
Brulec, como ouve mudança na ortografia brasileira (http://recantodasletras.uol.com.br/gramatica/1379990), eu incluiria o conteúdo sem o sinal de trema, da seguinte forma:
Função para remover o "trema" da letra "U/u":
No meu caso, utilizo a rotina abaixo para trabalhar com MySQL x VFP (http://forum.programacaobrasil.com/visual-foxpro-f4/mysql-x-visual-foxpro-t72.htm?highlight=mysql):
Então o INSERT ficaria da seguinte forma:
Espero ter ajudado!
Se eu conseguir uma forma de filtrar os dados com trema sem alterar a estrutra da tabela, lhe comunico.
Função para remover o "trema" da letra "U/u":
- Código:
FUNCTION tirartrema
LPARAMETERS conteudo AS STRING
m.conteudo = STRTRAN(m.conteudo, "ü", "u")
m.conteudo = STRTRAN(m.conteudo, "Ü", "U")
RETURN m.conteudo
ENDFUNC
No meu caso, utilizo a rotina abaixo para trabalhar com MySQL x VFP (http://forum.programacaobrasil.com/visual-foxpro-f4/mysql-x-visual-foxpro-t72.htm?highlight=mysql):
- Código:
DEFINE CLASS acessomysql AS CUSTOM
HIDDEN conexao AS adodb.CONNECTION
gnconnhandle = 0
*strconexao="DRIVER={MySQL ODBC 3.51 Driver};SERVER=200.111.111.111;DATABASE=NOMEDOBANCO;USER=NOMEDOUSUARIO;PASSWORD=SENHA;OPTION=3;"
strconexao="Driver={MySQL ODBC 5.1 Driver};Server=localhost;Database=teste; User=root;Password=12345;Option=3;"
FUNCTION conectamysql AS logical
*!* Conecta-se ao banco de dados a partir da string de conexão
THIS.gnconnhandle = SQLSTRINGCONNECT(THIS.strconexao)
RETURN THIS.gnconnhandle
ENDFUNC
FUNCTION desconectamysql AS logical
LPARAMETERS gnconnhandle AS INTEGER
*!*
IF (VARTYPE(m.gnconnhandle)!="N") THEN
m.gnconnhandle=THIS.gnconnhandle
ENDIF
*!*
IF (m.gnconnhandle>=0) THEN
RETURN SQLDISCONNECT(m.gnconnhandle)
ELSE
RETURN -1
ENDIF
ENDFUNC
FUNCTION executacomando
LPARAMETERS gnconnhandle AS INTEGER, comandosql AS STRING, nomecursor AS STRING
*!*
IF (THIS.gnconnhandle>=0) THEN
IF (VARTYPE(m.gnconnhandle)!="N") THEN
m.gnconnhandle=THIS.gnconnhandle
ENDIF
*!*
RETURN SQLEXEC(m.gnconnhandle,m.comandosql,m.nomecursor)
ELSE
RETURN -1
ENDIF
ENDFUNC
HIDDEN PROCEDURE INIT AS void
THIS.conexao = NEWOBJECT("adodb.connection")
ENDPROC
HIDDEN PROCEDURE DESTROY AS void
THIS.conexao = NULL
ENDPROC
ENDDEFINE
Então o INSERT ficaria da seguinte forma:
- Código:
CLEAR
m.obj = NEWOBJECT('acessoMysql')
m.nomecursor = SYS(2015)
m.gnconnhandle = m.obj.conectamysql()
?m.gnconnhandle
*!* INSERT
?m.obj.executacomando(m.gnconnhandle, "INSERT INTO teste1 VALUES ('"+tirartrema("üüüüüüüü")+"')", m.nomecursor)
*!* SELECT
?m.obj.executacomando(m.gnconnhandle, "SELECT * FROM teste1 WHERE campo1 LIKE '%u%'", m.nomecursor)
?m.obj.desconectamysql(m.gnconnhandle)
*!*
IF USED(m.nomecursor) THEN
SELECT(m.nomecursor)
BROWSE
USE IN SELECT(m.nomecursor)
ENDIF
*!*
m.obj = NULL
Espero ter ajudado!
Se eu conseguir uma forma de filtrar os dados com trema sem alterar a estrutra da tabela, lhe comunico.

Marcos Guedes- Webmaster

Re: Collations
Marcos, infelizmente não posso fazer isso, pois trata-se de nomes próprios, e o sistema que trabalho é para cartórios, aí o negócio complica mais ainda. Mas blz, eu dei uma olhada nos seguinte comandos no mysql.
Fiz um inserto com o nome 'Röberto' e utilizei o seguinte select:
Blz, ele retornou só que agora se eu pesquisar por 'RÖBERTO' (com trema), não acha. Bah, complicado esse negócio.
Fiz um inserto com o nome 'Röberto' e utilizei o seguinte select:
- Código:
select * from pessoaf where nom_pef like _latin1 "%ROBERTO%" COLLATE latin1_german1_ci;
Blz, ele retornou só que agora se eu pesquisar por 'RÖBERTO' (com trema), não acha. Bah, complicado esse negócio.
brulec- Começando a Participar

Re: Collations
Ótima solução!
Tente desta forma, então:
Comigo funcionou!
Tente desta forma, então:
- Código:
select * from pessoaf where nom_pef like "RÖBERTO" OR nom_pef like _latin1 "%ROBERTO%" COLLATE latin1_german1_ci;
Comigo funcionou!

Marcos Guedes- Webmaster

Re: Collations
Funciona, mas no meu caso vai ser mais complicado, afinal aqui a pesquisa nos sistemas, é única pra tudo, o buraco é mais em baixo, mas de qualquer forma obrigado pela ajuda Marcos. Se conseguíssemos fazer mais pessoas utilizarem esse fórum sobre Mysql, seria ótimo, afinal não encontrei nenhum outro fórum interessante sobre o Mysql. O do VfpBrasil tá meio abandonado né.
brulec- Começando a Participar

Re: Collations
Funciona, mas no meu caso vai ser mais complicado, afinal aqui a pesquisa nos sistemas, é única pra tudo, o buraco é mais em baixo...
Estais usando o fox, não é?!
De que forma estais acessando o banco?
Como se trata apenas de uma condição, creio que não irá interferir nas consultas (para este caso).
Se conseguíssemos fazer mais pessoas utilizarem esse fórum sobre Mysql, seria ótimo, afinal não encontrei nenhum outro fórum interessante sobre o Mysql.
Isto é verdade!
Tenho divulgado o máximo que posso, mas aos poucos chegaremos lá.
hehe
Este semestre irei pagar banco de dados na universidade, e provavelmente a linguagem será MySQL, então aproveitarei para divulgar aos alunos também.

Marcos Guedes- Webmaster

Re: Collations
Uso fox sim, mas a questão é que aqui os comandos de select, como posso dizer, "se montam sozinhos" (isso incluindo joins e tudo). E assim eu teria que verificar o tipo de campo no banco de dados para incluir essa cláusula collate. Bom, é difícil explicar isso, pra entender só vendo mesmo, heheeh.
Blz então Marcos, vou continuar pesquisando pra ver oque encontro sobre isso.
Valeu
Blz então Marcos, vou continuar pesquisando pra ver oque encontro sobre isso.
Valeu
brulec- Começando a Participar

Página 1 de 2 • 1, 2 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum




» Duvida de utilização ODBC X ado
» Criar Classe Limpas!
» Total Code Generator
» SELECT e Botões ANTERIOR E PROXIMO.
» Interpretador de "VFPSCRIPT"
» Encriptação MD5
» Musicas que fizeram parte de minha vida!
» 2 Homens e meio
» Bom Dia Boa Tarde Boa Noite
» help hackers vfp7
» O Gmail se atreveu a nos dizer o que é mais importante para nós
» AVATAR
» Banda larga, WIMAX x SKy, fim dos nossos problemas?
» Anti Tracks 7 ( free em 06/09/2010 )
» VFP x Firebird
» Eu queria comprar um notbruike
» SQLEXEC ACCESS
» converter campo data/hora
» Da série: Completando minhas fotos!