Page 1 of 1

Harbour y MySQL - tildes y eñes

PostPosted: Tue Nov 23, 2021 4:27 pm
by José
Hola a todos

Un gusto, después de años de nuevo por acá... para preguntar esta vez... y para quedarme...

Tengo un sistema con xHarbour + Eagle1 para ddbb MySQL. Lo estoy migrando a HB 3.2 + FWH 20.07 + Borland C++ 7.0 + Pelles C 9.0 + MySQL/MariaDB 10.3 + xMate, en 32 bit.

La versión anterior todo bien con las tildes y eñes en MySQL. Pero en la nueva con HB que entiendo es con MySQL nativo, las vocales tildadas y las eñes se graban y leen con un "?"

He intentado todo lo posible, leyendo todo lo encontrado... y nada. Lo hecho por ejemplo es:

* La Tabla MySQL y el campo/columna tienen Charset latin1, Collation latin1_spanish_ci (entiendo que con Eagle1 podía tener otro y aún así operar bien)

* En el proyecto incluí la librería dolphin.lib de FWH para que al compilar acepte el Set_MyLang( 'es_ES' )

* Uso esto en el init PROCEDURE

Set Exact on
request hb_gt_win
set talk off
set echo off
set bell off
set confirm off
set wrap on
set date french
set date format 'dd/mm/yyyy'
set century on
Request DBFCDX, DBFFPT, OrdCreate, OrdKeyCount, OrdKeyNo, OrdKeyGoto
RddSetDefault( 'DBFCDX')
set deleted on
set autopen off
set exclusive on
Set optimize on
cursorwait()
readinsert( .t. )
SetBalloon( .T. )
setresdebug( .F. )
clear all
FwSetLanguage( 2 )
Request HB_LANG_ES
HB_LangSelect( 'ES' )
request HB_CODEPAGE_ESWIN
HB_SetCodePage( 'ESWIN' )
HB_CDPSELECT( 'ESWIN' )
Fw_SetUnicode( .F. )
Set_MyLang( 'es_ES' )

Saco, cambio, agrego... y nada...

* El proyecto incluye FWH...\lib\libmysql.lib y también agregué desde las lib de Harbour el rddsql.lib por si acaso, pero nada.

Como no se que más hacer, por favor solicito ayuda.

Muchas gracias

Re: Harbour y MySQL - tildes y eñes

PostPosted: Tue Nov 23, 2021 7:23 pm
by JoseAlvarez
Hola José,

Prueba configurando

Utf8_spanish_ci y utf_unicode_ci

Re: Harbour y MySQL - tildes y eñes

PostPosted: Tue Nov 23, 2021 8:16 pm
by José
JoseAlvarez

Hola, gracias por responder!.

Probé en la tabla (que es MyISAM) y en el campo, definiendo Charset: utf8, y Collation: utf8_spanish_ci y utf8_unicode_ci... pero sigue el mismo error.

Quedo atento por favor a más sugerencias o experiencias.

Re: Harbour y MySQL - tildes y eñes

PostPosted: Wed Nov 24, 2021 4:25 am
by Antonio Linares
José,

Bienvenido nuevamente a bordo :-)

Enviado email al Sr. Rao y a Manu para que nos echen una mano con Eagle1 y MySQL

Te respondemos cuanto antes

Re: Harbour y MySQL - tildes y eñes

PostPosted: Wed Nov 24, 2021 1:42 pm
by José
Hola Antonio

Muchas gracias, quedo atento porque es muy importante para mi migrar a MySQL/MariaDB con Harbour.

Gracias y felicitaciones a todos los que crean y aportan en todos estos productos.

Re: Harbour y MySQL - tildes y eñes

PostPosted: Wed Nov 24, 2021 11:49 pm
by sysctrl2
La tabla debe de crearse de la siguiente forma:
poner atención en esta linea de codigo:
cQry += "ENGINE=InnoDB DEFAULT CHARSET=latin1"

Code: Select all  Expand view

METHOD CreaPermisos_users( oCon ) class CreaTablas
  local cQry, oQry

  cQry := "CREATE TABLE IF NOT EXISTS permisos_users ( "
  cQry += "id_permisos_users INT UNSIGNED NOT NULL AUTO_INCREMENT,"
  cQry += "user_code         varchar(15) default '', "
  cQry += "modulo         varchar(100) default '', "
  cQry += "permitir   varchar(1) default 'N', "
  cQry += "depto   varchar(50) default '', "
  cQry += "PRIMARY KEY (id_permisos_users ) , INDEX (user_code)  ) "
  cQry += "ENGINE=InnoDB DEFAULT CHARSET=latin1"
  oCon:Execute( cQry )

Return nil

 


Saludos !

Re: Harbour y MySQL - tildes y eñes

PostPosted: Thu Nov 25, 2021 12:43 am
by José
Gracias Sysctrl2 por tu respuesta.

He hecho el cambio
Table engine: InnoDB
Charset: latin1
Collation: latin1_spanish_ci

Cambio comprobado con herramientas externas, para la tabla y para los campos; pero no corrige el error: sigue reemplazando con '?' las letras con tilde y las eñes.

Sigo atento.

Re: Harbour y MySQL - tildes y eñes

PostPosted: Thu Nov 25, 2021 12:58 am
by sysctrl2
Jose puedes crear una nueva tabla
desde tu aplicación ?
saludos.

Re: Harbour y MySQL - tildes y eñes

PostPosted: Thu Nov 25, 2021 1:29 am
by JoseAlvarez
José wrote:Gracias Sysctrl2 por tu respuesta.

He hecho el cambio
Table engine: InnoDB
Charset: latin1
Collation: latin1_spanish_ci

Cambio comprobado con herramientas externas, para la tabla y para los campos; pero no corrige el error: sigue reemplazando con '?' las letras con tilde y las eñes.

Sigo atento.


José,

No te sugerí nada mas porque leí que usabas MYISAM, como veo que estas probando con INNODB, trata configurando la base de datos y los campos alfanumericos de las tablas (uno a uno) con utf_8 y utf8_general_ci

Intenta con eso... puedes crear una base de datos con una tabla de un solo campo para que hagas las pruebas.

Re: Harbour y MySQL - tildes y eñes

PostPosted: Mon Nov 29, 2021 1:21 pm
by xmanuel
Hola José...
Soy Manu Expósito el desarrollador de Eagle1.
He estado fuera un tiempo y cuando he vuelto Antonio me ha enviado un correo para ver este problema con la nueva versión y Eagle1.
No sé si aún sigues teniendo el problema...
Si es así dime exactamente qué ocurre.
Si quieres a mi correo xmessoft en gmail
Luego si quieres publicas aquí la solución por si alguien tiene ese mismo problema.

Re: Harbour y MySQL - tildes y eñes

PostPosted: Fri Dec 03, 2021 5:01 am
by José
Buenas noches

Gracias a todos por sus respuestas y apoyo. JoseAlvares, Cesar, Antonio, Manu. SOLUCIONADO

1.- Lo que estoy procurando hacer es usar MySQL / MaríaDB con FWH 21.06 + HB 3.2 y los recursos nativos (o así lo entiendo) proporcionados por estas herramientas.

2.- Si, puedo crear bases de datos y tablas desde dentro de mi aplicación, eso me sirvió para hacer múltiples pruebas con sus sugerencias!

3.- Finalmente, lo que me funciona bien es configurar el software así:

FwSetLanguage( 2 )
Request HB_LANG_ES
HB_LangSelect( 'ES' )
request HB_CODEPAGE_ESWIN
HB_SetCodePage( 'ESWIN' )
HB_CDPSELECT( 'ESWIN' )
Fw_SetUnicode( .F. ) ---> debe ser .F. !!!
Set_MyLang( 'es_ES' )

y las tablas con:
Table Engine: InnoDB
Charset: latin1
Collation: latin1_general_ci

y las columnas con:
Charset: latin1
Collation: latin1_general_ci (u otros latin1_... también)

4.- De esta forma puedo grabar y leer datos hacia y desde la ddbb MySQL con la versión del sistema que aún uso (FW + xHb + Eagle1...de hace varios años) y con la que estoy evolucionando con las herramientas antes mencionadas, indistintamente, y todo Ok con los tildes y las eñes.

* Finalmente dos preguntas:

¿Desde su experiencia algún consejo respecto a usar InnoDB o MyISAM?. He leído y visto material pero no me queda claro.

¿Para que la ddbb y el sistema soporte idiomas como el Chino, que se debe hacer?. Por lo estudiado entiendo que definir Fw_SetUnicode( .F. ) y todo lo demás a español o latino como tuve que hacer, lo impediría. Esto no me apura, pero si puedo considerarlo desde ya, mejor.

Nuevamente muchas gracias por todo!!!... espero que lo que funcionó le sirva a alguien más.

Re: Harbour y MySQL - tildes y eñes

PostPosted: Fri Dec 03, 2021 12:41 pm
by Carles
Hola,

Probad cuando conecteis con la base de datos de ejecutar esta query antes que cualquier otra --> "SET NAMES utf8"

C.

Re: Harbour y MySQL - tildes y eñes

PostPosted: Sat Dec 04, 2021 4:24 am
by carlos vargas
Lo poco que se es que myisam fue
Uno de los primeros motores de
Mysql, no soporta transacciones, pero es
Muy rapido recuperando informacion, de ahi que se usa mucho en desarrollo web, innodb soporta transacciones lo cual implica que usa mas
memoria, espacio en disco y es mas lento que myisam, innodb es lo adecuado para
Nuestras aplicaciones.

Algunos usan ciertas tablas en myisan y otras en innodb, por ejemplo recuerdo de alguien que recomendo
usar tablas myisam para cuando
guardemos documentos en campos blob a lo cauo estoy de acuerdo dado que no tiene sentido usar transacciones en este caso y por lo general los datos tienen un buen tamaño lo que lo hace no recomentable usar trans.

Re: Harbour y MySQL - tildes y eñes

PostPosted: Sat Dec 04, 2021 12:54 pm
by JoseAlvarez
Buenos dias carlos, buenos dias a todos.

La verdad que no se me habia ocurrido usar ambos tipos de tablas combinados.

Voy a probar.

Gracias carlos ¡ la informacion es muy util para optimizar las aplicaciones

Re: Harbour y MySQL - tildes y eñes

PostPosted: Sat Dec 04, 2021 9:49 pm
by José
Hola a todos

Carles, gracias, haré pruebas con tu sugerencia.
Carlos. Gracias por la información, tomo nota y lo aplicaré

Mi última pregunta acá, para sus sugerencias de mejora. Gracias.

por ahora tengo algunos ciclos para llenar datos MySQL como este (resumido para preguntar por la lógica):

while ...
oMyQue := oMyCon:RowSet( 'select count(*) from ' + cTabla + ' where ' + cCMy + ' = "' + &cCDbf + '" limit 1' )
if oMyQue # nil
nCmd := 0
if oMyQue:FieldGet( 1 ) = 0 // contó cero reg: clave no existe
do case
// Tablas...
case cTabla = 'CLIENTES'
nCmd := MySincClienteCrea() --> crear el registro de cliente con insert... devolviendo nCmd
....
....
endcase
if nCmd # Nil .and. nCmd > 0 // ok, reg creado
.... ok
else
// avisar que hubo un error...
endif
endif
else
...consulta verificar si reg existe falló
endif
if oMyQue # Nil
oMyQue:End() --> ¿está bien o mal hacerlo? ¿aporta a rendimiento o es malo?
endif
enddo

¿Esto se puede reemplazar por una forma más profesional o segura u optimizada?

De nuevo muchas gracias a todos, que disfruten un excelente fin de semana...