Postgres SQLMIX e as letras com acentos !

Forum sobre SQL.

Moderador: Moderadores

Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Postgres SQLMIX e as letras com acentos !

Mensagem por Itamar M. Lins Jr. »

Olá!
Meu DBF no WINDOWS usa PTISO.(não é UTF8)
Captura de tela 2023-07-20 181231.png
Captura de tela 2023-07-20 181231.png (4.41 KiB) Exibido 6538 vezes

Código: Selecionar todos

dbUseArea( .T., "SQLMIX" , "SELECT datcollate AS collation FROM pg_database WHERE datname = 'db_sci'",'xa'  )
hwg_MsgInfo('Página de código na tabela do Postgres: ' + xa->collation)
FechaDb('xa')
//Convertendo para Portuguese_Brazil.1252 que é UTF8 usamos UTF8 com EX->estendido (acentos)

   cSQL := hb_Translate(cSQL,"PTISO","UTF8EX")
   lRet := rddInfo(RDDI_EXECUTE,cSQL)
   IF lRet
   ELSE
      hwg_MsgStop('Falha incluindo dados !')
      hwg_msgInfo(cSQL)
      RETURN .T.
   ENDIF
Captura de tela 2023-07-20 181707.png
Captura de tela 2023-07-20 181707.png (3.64 KiB) Exibido 6538 vezes
O Harbour está convertendo uma STRING enorme para UTF8 em segundos.
Exportando perto de 5 mil itens do DBF para o postgres via SQLMIX em milésimos de segundos!

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Postgres SQLMIX e as letras com acentos !

Mensagem por JoséQuintas »

Sei lá, acho que tá delirando.

Código: Selecionar todos

FUNCTION MySQLConnection( cServer, cDatabase, cUser, cPassword, nPort )

   LOCAL cnConnection, cString

   hb_Default( @nPort, 3306 )
   cString := iif( win_OsIs10(), "Provider=MSDASQL;", "" )
   cString += "Driver={MySQL ODBC 5.3 ANSI Driver};"
   cString += "Server=" + cServer + ";" + ;
      "Port=" + Ltrim( Str( nPort ) ) + ";" + ;
      "Stmt=;"    + ;
      "Database=" + cDatabase + ";" + ;
      "User="     + cUser + ";" + ;
      "Password=" + cPassword + ";" + ;
      "Collation=latin1_swedish_ci;" + ;
      ; // "SCHEMANOERROR=1;" + ;
      "AUTO_RECONNECT=1;" + ;
      "COMPRESSED_PROTO=0"
      // "PAD_SPACE=1;" + ; // omitido 2022.02.17

   cnConnection := win_OleCreateObject( "ADODB.Connection" )
   cnConnection:ConnectionString  := cString
   cnConnection:CursorLocation    := AD_USE_CLIENT
   cnConnection:CommandTimeOut    := 600 // seconds
   cnConnection:ConnectionTimeOut := 600 // seconds

   RETURN cnConnection
Na conexão é só definir a codepage.
ISSO NÃO TEM A VER COM ADO, é recurso do MySQL, pode até salvar como UTF-8 normalmente, e trabalhar com PTISO, ou aplicativos diferentes com codepage diferente.
Provavelmente dá pra fazer o mesmo no Postgres e não precisa converter nada.

Como postou em SQL, supõe-se que tenha a ver com banco de dados.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Postgres SQLMIX e as letras com acentos !

Mensagem por Itamar M. Lins Jr. »

Olá!
Use SQLMIX com Postgres e veja se estou delirando.
Tudo que posto de SQLMIX vc coloca MYSQL + ADO já reparou isso ?
Não defini nada. Criei a tabela deu erro quando adicionava a descrição, resolvi da forma que postei.
Usando SQLMIX, vem vc e posta ODBC + STRING de conexão com ADO, se souber como fazer USANDO SQLMIX eu agradeço!
Não quero usar NADA do windows! Quero usar DLL etc sem recursos ADO do Windows (se possível)


Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Postgres SQLMIX e as letras com acentos !

Mensagem por Itamar M. Lins Jr. »

Olá!
Como eu uso isso aqui:
cString é aquela "RUMA" de configuração que vc usou!

cnConnection := win_OleCreateObject( "ADODB.Connection" )
cnConnection:ConnectionString := cString
Depois meteu lá no ADO! Como eu faço isso usando SQLMIX ?

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Postgres SQLMIX e as letras com acentos !

Mensagem por Itamar M. Lins Jr. »

Olá!
Quando instalei o Postgres 15 ele perguntou se iria usar o code page do os windows como padrão, disse que sim.
Sei que posso criar tabela com qualquer code page e posso mudar. Mas estou usando o padrão em tudo para não ficar mexendo em nada sem necessidade.
No Linux deve ser a mesma coisa UTF8 por padrão. Não sei ainda vou ver isso no Linux. Esse code page do windows "win_não_sei_das_quantas" é o tal UNICODE que é UTF8... é isso que entendo.
Even though Windows-1252 is almost identical to ISO-8859-1, it has never been an ANSI or ISO standard.
1252 windows-1252 ANSI Latin 1; Western European (Windows)
É esse Portuguese_Brazil_1252 que o Postgres identificou e colocou na tabela... é UTF8 ou algo parecido, PTISO é do Harbour... Ainda sem entender todo esse assunto.
Nem pretendo, funcionando já tá de boas!

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Postgres SQLMIX e as letras com acentos !

Mensagem por JoséQuintas »

Itamar M. Lins Jr. escreveu:Use SQLMIX com Postgres e veja se estou delirando.
Tudo que posto de SQLMIX vc coloca MYSQL + ADO já reparou isso ?
Não defini nada. Criei a tabela deu erro quando adicionava a descrição, resolvi da forma que postei.
Usando SQLMIX, vem vc e posta ODBC + STRING de conexão com ADO, se souber como fazer USANDO SQLMIX eu agradeço!
Não quero usar NADA do windows! Quero usar DLL etc sem recursos ADO do Windows (se possível)
Não posso falar sobre Postgres porque nunca usei.
Estou te dando uma referência que talvez encontre no Postgress.

Pra poder mostrar a string, e aonde ela é usada, preciso avisar que é usada no ADO e que se trata de MySQL.
Isso é usado com o conector MYSQL, por isso destaquei que não tem a ver com ADO.
É só uma explicação sobre o fonte que postei.

Apenas coloquei como referência, agora que sabe que isso existe, pode verificar se o Harbour faz isso automático, ou se precisa algo mais.

Por outro lado......
ODBC não é exclusividade Windows, existe no Linux.
E SQLMIX trabalha com ODBC.
Então.... serve pra você.
Um obrigado poderia ser suficiente.

https://www.google.com/search?q=odbc+linux+mysql
On Unix, you configure DSN entries directly in the odbc.ini file. Here is a typical odbc.ini file that configures myodbc8w (Unicode) and myodbc8a (ANSI) as DSN names for Connector/ODBC:
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Postgres SQLMIX e as letras com acentos !

Mensagem por Itamar M. Lins Jr. »

Olá!
Um obrigado poderia ser suficiente.
Vc está é me atrapalhando. Isso que vc postou eu já sabia.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Postgres SQLMIX e as letras com acentos !

Mensagem por JoséQuintas »

Itamar M. Lins Jr. escreveu:Vc está é me atrapalhando. Isso que vc postou eu já sabia.
Itamar M. Lins Jr. escreveu:se souber como fazer USANDO SQLMIX eu agradeço!
Fiz o que pediu.
Só não agradeceu, como disse que ia fazer.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Postgres SQLMIX e as letras com acentos !

Mensagem por Itamar M. Lins Jr. »

Olá!

Onde está o ODBC ai ?

Código: Selecionar todos

cRdd := RDDSETDEFAULT( "SQLMIX" )
nCon := rddInfo( RDDI_CONNECT, { "POSTGRESQL","127.0.0.1","postgres","@senha",,"5432"})
IF nCon == 0
   hwg_MsgInfo("Não conectou no Postgres: " + Str(nCon) )
   RDDSETDEFAULT( cRdd )
   RETURN .T.
ENDIF
Criei a base de dados.

Código: Selecionar todos

   if !rddInfo( RDDI_EXECUTE, "CREATE DATABASE db_sci;"  )   
      hwg_msgstop("Falha criando base de dados db_sci")
   endif

Não disse nada COLLATE etc.. NADA!

Criei a tabela e não especifiquei nada.

Código: Selecionar todos

cSQL := ' "CREATE TABLE IF NOT EXISTS produtos ( 
Meu DBF usa PTISO. Pelo que entendo o Postgres salva tudo em UTF8.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Postgres SQLMIX e as letras com acentos !

Mensagem por JoséQuintas »

Itamar M. Lins Jr. escreveu:
Criei a base de dados.
Não disse nada COLLATE etc.. NADA!
Criei a tabela e não especifiquei nada.
Pelo que entendo o Postgres salva tudo em UTF8.
The default character set is selected while initializing your PostgreSQL database cluster using initdb. It can be overridden when you create a database, so you can have multiple databases each with a different character set.
To query the current client encoding:
SHOW client_encoding;
Setting the client encoding can be done with this SQL command:
SET CLIENT_ENCODING TO 'value';
Como deve ter percebido, o que postei mostrando sobre ADO e MySQL, vale pra PostgreSQL, era só pesquisar no google.
Continua faltando o agradecimento.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Postgres SQLMIX e as letras com acentos !

Mensagem por Itamar M. Lins Jr. »

Olá!
Tá doido!
Isso eu já sei desde a época do DBF.
Não quero mudar a tabela, já vi que o SGBD converte via função própria ou se cria uma função para isso.
Usei a função do Harbour.
Porque é melhor no meu entendimento deixar UTF8 como padrão pq salvo em formato universal.
Se precisar jogar para HTML/PHP etc já tá em UTF8.
E na minha base DBF em PTISO que é ISO8859-1.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Postgres SQLMIX e as letras com acentos !

Mensagem por fladimir »

Quintas
Vc sempre ajuda a comunidade, isso é bom, agradeço, porém muitas vezes enche em demasiado de informações e tb geralmente responde como se o q fizéssemos fosse errado, sugiro q tente complementar e agregar de forma objetiva pra não poluir o fórum com milhares de informações q nem sempre ajudam pq enche tanto de informação q nos perdemos, pelo menos falo por mim, se conseguir ser mais especifico, claro e objetivo ajudaria, e tb em 1 post, pq as vezes vc faz 1 post ai não teve resposta, ai vc se lembra de mais alguma coisa, ao invés de editar o post anterior, cria outro post, o bom seria agregar no mesmo post, já q não teve uma resposta posterior, e revisar ele se pode ser ajustado, resumido, objetivado etc.

No caso do Itamar por exemplo, poderia ter questionado ele perguntando algo do q dizendo q acha q o cara ta delirando e posta algo q qdo olhei tb achei muito distante do tópico, ele postou sobre SQLMix, vc vem com ADO.

Quem sabe se tivesse perguntado e tb agradecido ao colega... Itamar obrigado pelo seu exemplo em SQLMix etc etc, mas será q usando ADO não seria melhor etc etc ai mostra seu exemplo, é isso q me refiro.

Se não Quintas fica como se vc fosse o Semi Deus do Olimpo e nós os meros mortais sempre totalmente errados e não é assim q funciona.

Mas enfim é isso, se quiser apagar depois fique a vontade.
Itamar
No caso o codepage do Postgres não pode ser alterado (após instalar ele default) via programação? Pq ai no caso, se fosse possível, não precisaria converter conforme demostrou.
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Postgres SQLMIX e as letras com acentos !

Mensagem por Itamar M. Lins Jr. »

Olá!
Postgres não pode ser alterado (após instalar ele default) via programação?
Sim pode, estou na dúvida se fazendo isso perco o armazenamento em UTF8.
Eu quero armazenar em UTF8 e o próprio postgres converteria isso quando fosse gravar acredito que se informar COLLATE=Minha Page Code a tabela perde o UTF8.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Postgres SQLMIX e as letras com acentos !

Mensagem por Itamar M. Lins Jr. »

Olá!
Mais informações, se não usamos UTF8 no DBF, usamos pelo menos 3 que é o meu caso.
O DBF usa PTISO, o Windows WIN1252 que é esse PortugueseBrazil_1252 no postgres. E nos postgres dentro da tabela UTF8.
É isso que entendi até agora.
Eu que tenho que converter por conta do DBF se o DBF usa-se WIN1252 do Windows estaria ok. Acredito que esse Win1252 seja uma variante UTF8.
Lógico que posso abrir/criar/gravar a tabela com PTISO mas ai teria que converter para UTF8...não sei, estou pensando a curto e longo prazo qual será o melhor caso...Outros programas usam qual ? Acredito que todos na WEB usem UTF8, menos trabalho a curto é deixar em PTISO. Porém o próprio OS(windows) já usa UTF8 como padrão.
Disso tudo a lição que ficou foi que, eu pensava que era um BUG do SQLMIX na hora do comando INSERT. "CAFÉ"(Do DBF) não ia "CAFE(Do DBF)" ia sem problema.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Postgres SQLMIX e as letras com acentos !

Mensagem por JoséQuintas »

fladimir escreveu:Vc sempre ajuda a comunidade, isso é bom, agradeço, porém muitas vezes enche em demasiado de informações e tb geralmente responde como se o q fizéssemos fosse errado, sugiro q tente complementar e agregar de forma objetiva pra não poluir o fórum com milhares de informações q nem sempre ajudam pq enche tanto de informação q nos perdemos, pelo menos falo por mim, se conseguir ser mais especifico, claro e objetivo ajudaria, e tb em 1 post, pq as vezes vc faz 1 post ai não teve resposta, ai vc se lembra de mais alguma coisa, ao invés de editar o post anterior, cria outro post, o bom seria agregar no mesmo post, já q não teve uma resposta posterior, e revisar ele se pode ser ajustado, resumido, objetivado etc.

No caso do Itamar por exemplo, poderia ter questionado ele perguntando algo do q dizendo q acha q o cara ta delirando e posta algo q qdo olhei tb achei muito distante do tópico, ele postou sobre SQLMix, vc vem com ADO.

Quem sabe se tivesse perguntado e tb agradecido ao colega... Itamar obrigado pelo seu exemplo em SQLMix etc etc, mas será q usando ADO não seria melhor etc etc ai mostra seu exemplo, é isso q me refiro.

Se não Quintas fica como se vc fosse o Semi Deus do Olimpo e nós os meros mortais sempre totalmente errados e não é assim q funciona.

Mas enfim é isso, se quiser apagar depois fique a vontade.
Quando ao fórum, era recomendado pelo fórum não ficar editando mensagens.
Não se trata de alguém não ter respondido, mas sim de alguém já ter lido.
Ninguém vai ficar revendo tudo que é post pra ver se alguém alterou, então acréscimo de informação poderia não ser visto.

Quanto ao restante, ou não entenderam, ou estão se fazendo de desentendidos, ou querem ensinar errado de propósito, sei lá...
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder