Harbour y MySQL - tildes y eñes
Harbour y MySQL - tildes y eñes
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
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
José Concha Leiva - Chile
"Querer, saber y hacer, es poder"
HB MSVSC + FWH 24.04 + MySQL/MaríaDB/DBFCDX (64 bits)
https://zenitx.com
"Querer, saber y hacer, es poder"
HB MSVSC + FWH 24.04 + MySQL/MaríaDB/DBFCDX (64 bits)
https://zenitx.com
- JoseAlvarez
- Posts: 810
- Joined: Sun Nov 09, 2014 5:01 pm
Re: Harbour y MySQL - tildes y eñes
Hola José,
Prueba configurando
Utf8_spanish_ci y utf_unicode_ci
Prueba configurando
Utf8_spanish_ci y utf_unicode_ci
"Los errores en programación, siempre están entre la silla y el teclado..."
Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin
Carora, Estado Lara, Venezuela.
Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin
Carora, Estado Lara, Venezuela.
Re: Harbour y MySQL - tildes y eñes
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.
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.
José Concha Leiva - Chile
"Querer, saber y hacer, es poder"
HB MSVSC + FWH 24.04 + MySQL/MaríaDB/DBFCDX (64 bits)
https://zenitx.com
"Querer, saber y hacer, es poder"
HB MSVSC + FWH 24.04 + MySQL/MaríaDB/DBFCDX (64 bits)
https://zenitx.com
- Antonio Linares
- Site Admin
- Posts: 42520
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Has thanked: 31 times
- Been thanked: 75 times
- Contact:
Re: Harbour y MySQL - tildes y eñes
José,
Bienvenido nuevamente a bordo![Smile :-)](./images/smilies/icon_smile.gif)
Enviado email al Sr. Rao y a Manu para que nos echen una mano con Eagle1 y MySQL
Te respondemos cuanto antes
Bienvenido nuevamente a bordo
![Smile :-)](./images/smilies/icon_smile.gif)
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
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.
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.
José Concha Leiva - Chile
"Querer, saber y hacer, es poder"
HB MSVSC + FWH 24.04 + MySQL/MaríaDB/DBFCDX (64 bits)
https://zenitx.com
"Querer, saber y hacer, es poder"
HB MSVSC + FWH 24.04 + MySQL/MaríaDB/DBFCDX (64 bits)
https://zenitx.com
Re: Harbour y MySQL - tildes y eñes
La tabla debe de crearse de la siguiente forma:
poner atención en esta linea de codigo:
cQry += "ENGINE=InnoDB DEFAULT CHARSET=latin1"
Saludos !
poner atención en esta linea de codigo:
cQry += "ENGINE=InnoDB DEFAULT CHARSET=latin1"
Code: Select all | Expand
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 !
Cesar Cortes Cruz
SysCtrl Software
Mexico
' Sin +- FWH es mejor "
SysCtrl Software
Mexico
' Sin +- FWH es mejor "
Re: Harbour y MySQL - tildes y eñes
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.
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é Concha Leiva - Chile
"Querer, saber y hacer, es poder"
HB MSVSC + FWH 24.04 + MySQL/MaríaDB/DBFCDX (64 bits)
https://zenitx.com
"Querer, saber y hacer, es poder"
HB MSVSC + FWH 24.04 + MySQL/MaríaDB/DBFCDX (64 bits)
https://zenitx.com
Re: Harbour y MySQL - tildes y eñes
Jose puedes crear una nueva tabla
desde tu aplicación ?
saludos.
desde tu aplicación ?
saludos.
Cesar Cortes Cruz
SysCtrl Software
Mexico
' Sin +- FWH es mejor "
SysCtrl Software
Mexico
' Sin +- FWH es mejor "
- JoseAlvarez
- Posts: 810
- Joined: Sun Nov 09, 2014 5:01 pm
Re: Harbour y MySQL - tildes y eñes
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.
"Los errores en programación, siempre están entre la silla y el teclado..."
Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin
Carora, Estado Lara, Venezuela.
Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin
Carora, Estado Lara, Venezuela.
-
- Posts: 768
- Joined: Sun Jun 15, 2008 7:47 pm
- Location: Sevilla
- Been thanked: 5 times
- Contact:
Re: Harbour y MySQL - tildes y eñes
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.
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.
______________________________________________________________________________
Sevilla - Andalucía
Sevilla - Andalucía
Re: Harbour y MySQL - tildes y eñes
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.
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.
José Concha Leiva - Chile
"Querer, saber y hacer, es poder"
HB MSVSC + FWH 24.04 + MySQL/MaríaDB/DBFCDX (64 bits)
https://zenitx.com
"Querer, saber y hacer, es poder"
HB MSVSC + FWH 24.04 + MySQL/MaríaDB/DBFCDX (64 bits)
https://zenitx.com
- Carles
- Posts: 1149
- Joined: Fri Feb 10, 2006 2:34 pm
- Location: Barcelona
- Been thanked: 7 times
- Contact:
Re: Harbour y MySQL - tildes y eñes
Hola,
Probad cuando conecteis con la base de datos de ejecutar esta query antes que cualquier otra --> "SET NAMES utf8"
C.
Probad cuando conecteis con la base de datos de ejecutar esta query antes que cualquier otra --> "SET NAMES utf8"
C.
Salutacions, saludos, regards
"...programar es fácil, hacer programas es difícil..."
UT Page -> https://carles9000.github.io/
Forum UT -> https://discord.gg/bq8a9yGMWh
Skype -> https://join.skype.com/cnzQg3Kr1dnk
"...programar es fácil, hacer programas es difícil..."
UT Page -> https://carles9000.github.io/
Forum UT -> https://discord.gg/bq8a9yGMWh
Skype -> https://join.skype.com/cnzQg3Kr1dnk
- carlos vargas
- Posts: 1721
- Joined: Tue Oct 11, 2005 5:01 pm
- Location: Nicaragua
Re: Harbour y MySQL - tildes y eñes
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.
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.
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
Carlos Vargas
Desde Managua, Nicaragua (CA)
- JoseAlvarez
- Posts: 810
- Joined: Sun Nov 09, 2014 5:01 pm
Re: Harbour y MySQL - tildes y eñes
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
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
"Los errores en programación, siempre están entre la silla y el teclado..."
Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin
Carora, Estado Lara, Venezuela.
Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin
Carora, Estado Lara, Venezuela.
Re: Harbour y MySQL - tildes y eñes
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...
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...
José Concha Leiva - Chile
"Querer, saber y hacer, es poder"
HB MSVSC + FWH 24.04 + MySQL/MaríaDB/DBFCDX (64 bits)
https://zenitx.com
"Querer, saber y hacer, es poder"
HB MSVSC + FWH 24.04 + MySQL/MaríaDB/DBFCDX (64 bits)
https://zenitx.com