Página 1 de 2

Postgres SQLMIX e as letras com acentos !

Enviado: 20 Jul 2023 18:03
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 6548 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 6548 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.

Postgres SQLMIX e as letras com acentos !

Enviado: 20 Jul 2023 19:28
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.

Postgres SQLMIX e as letras com acentos !

Enviado: 20 Jul 2023 19:49
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.

Postgres SQLMIX e as letras com acentos !

Enviado: 20 Jul 2023 20:01
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.

Postgres SQLMIX e as letras com acentos !

Enviado: 20 Jul 2023 20:11
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.

Postgres SQLMIX e as letras com acentos !

Enviado: 20 Jul 2023 20:42
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:

Postgres SQLMIX e as letras com acentos !

Enviado: 20 Jul 2023 20:48
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.

Postgres SQLMIX e as letras com acentos !

Enviado: 20 Jul 2023 20:53
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.

Postgres SQLMIX e as letras com acentos !

Enviado: 20 Jul 2023 21:22
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.

Postgres SQLMIX e as letras com acentos !

Enviado: 20 Jul 2023 21:50
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.

Postgres SQLMIX e as letras com acentos !

Enviado: 21 Jul 2023 07:52
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.

Postgres SQLMIX e as letras com acentos !

Enviado: 22 Jul 2023 09:11
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.

Postgres SQLMIX e as letras com acentos !

Enviado: 22 Jul 2023 10:37
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.

Postgres SQLMIX e as letras com acentos !

Enviado: 22 Jul 2023 10:57
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.

Postgres SQLMIX e as letras com acentos !

Enviado: 22 Jul 2023 19:01
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á...