FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
charset ASCII a UTF8 Firebird
Hola Chicos que tal?
Hace apenas 22 días he notado un comportamiento despues de usar las versiones de Firebird 2.x sin ningún problema despues de casi 10 años no habia tenido la necesidad de migrar pero ultimamente con 22 conexiones simultaneas me ah estado bloqueando las transacciones y buscando el mensaje de error en los log de Firebird aparece la sugerencia que ese problema se da en las versiones 2.5.x Cita:
manda estos errores: gbak:restore failed for record in table PROVEEDORES Error: gbak: ERROR:Malformed string gbak:Invalid data detected. Use -FIX_FSS_DATA option. trate de corregirlo usando: -FIX_FSS_DATA ASCII -FIX_FSS_METADATA ASCII pues en teoría está la Base de datos en ASCII. Cita:
Saludos; novato_erick |
#2
|
|||
|
|||
Bueno leyendo las ayuda que aquí mismo la comunidad del Club encontré este post por el amigo Casimiro de hace buen tiempo: https://clubdelphi.com/foros/showthread.php?t=90783
la cual creo que dejaría a un lado el UTF8. aún mi pregunta de la recomendación está en pié para que alguien me responda. Saludos nuevamente; novato_erick |
#3
|
||||
|
||||
Yo hace un tiempo migré la base de datos a UNICODE.
La base de datos tenía el charset NONE, por lo que admitía cualquier cosa que le pusieras y no hacía ninguna transformación. Cuando empecé a entrar y leer datos desde diferentes sistemas empezaron a generarse muchos conflictos: Desde la web se metía texto en formato UTF-8 y desde Windows se leia como WIN-1252. Lo mismo sucedía cuando se escribía en windows y se leia en la web. La solución: Poner los campos texto (CHAR, VARCHAR, BLOB tipo texto) a charset UNICODE. Luego en la conexión a la base de datos le dices qué charset utilizas y entre el cliente y el servidor hacen la transformación necesaria. Nota: Yo trabajo con un Delphi viejo (Delphi 6) por lo que no adminte UTF8 como Charset. Ejemplo:
|
#4
|
||||
|
||||
Para migrar la base de datos me hice una pequeña aplicación que leia la estructura de la base de datos y crea otra modificando los campos "texto" para agregarles el CHARSET (CHARACTER SET UNICODE_FSS).
UNICODE es el sistema para identificar a cada caracter (cientos de miles en este momento). UTF-8 es una forma de codificar UNICODE tratando de reducir el espacio necesario. UTF-16, UTF-32: Lo mismo que UTF-8 pero sacrificando espacio. WIN1250, WIND1251, WIN1252, ISO8859, etc.: Son mapas de caracteres. Solo contienen algunos. Por ejemplo la Ñ está en algunos juegos de caracteres y en otros, la posición de ese carater representa otro distinto. ASCII: Es el juego mas limitado de 256 caracteres. NONE: En Firebird, se refiere a que tomará los bytes que se le pase y los guardará sin interpretar dentro del campo de texto. A quien lea también se le enviarán esos bytes. Esto puede dar lugar a malas interpretaciones. Por ejemplo: TEXTO tiene CS=NONE Conexión CS=NONE insert into PRUEBA(TEXTO)values('Artículo') <-- Con acento en la I Conexión CS=WIN1252 select TEXTO from PRUEBA(TEXTO) Resulta en 'artÃ*culos' TEXTO tiene CS=UNICODE_FSS Conexión CS=UTF-8 desde la web insert into PRUEBA(TEXTO)values('Artículo') <-- Con acento en la I Conexión CS=WIN1252 desde Windows select TEXTO from PRUEBA(TEXTO) Resulta en 'artículos' porque el cliente Firebird transforma de UNICODE_FSS a WIN1252 |
#5
|
|||
|
|||
Cita:
Este ejemplo para mi me resulta muy simple y comprensivo, no tengo una gran especialidad en Base de Datos lo que manejo me ah sido útil y funcional Aqui es donde uso la frace de todo programador: Si funciona no lo toques . Cita:
Cita:
suena interesante lo de tu "Pequeña aplicación" ya que yo utilizo SQL Manager Personal para exportar extructura pero el tuyo extrae y crea otra con la modificación de datos no quiero sonar perezoso pero tendría un costo si es asi escribeme en el privado o por aquí para que los participantes podamos conocer dicho aporte. Agradezco tu pronta y esperada respuesta; Saludos; novato_erick |
#6
|
||||
|
||||
Creo que con que cambies los campos implicados por utf8 ya irá bien.
Y si estás usando dominios (que siempre es lo más adecuado) será más fácil porque sólo tendrás que cambiar su declaración. Eso sí, lo mismo tendrás que "recodificar" los datos que tengas guardados ya, hacer un update leyendo lo que hay y convirtiéndolo al nuevo formato.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#7
|
||||
|
||||
Dado el interés, os dejo aquí la aplicación para leer una Base de Datos Firebird y crear otra con los campos texto con Charset UNICODE_FSS.
Esta aplicación utiliza los componentes FreeIB y está desarrollada en Delphi 6. Creo que está todo contenido dentro del ZIP. Además, está la aplicación compilada, lista para utilizar. Pedirá una base origen y su CharSet. En mi caso el CharSet es NONE. La base destino no debería existir, para que la aplicación la cree antes de traspasar los datos de una a otra. Los Checks arriba a la derecha son todos los datos que se van a traspasar. Iniciará traspasando los de la primera columna en orden (Generators, Exceptions, Domains, Tables) Luego hará el "Data Pump" en donde tratará de leer los datos y escribirlos en la base de datos destino. En este punto podrían darse problemas de "Transliterate". Esto es problemas donde no puede convertir lo que lee en Unicode válido. Luego de esto, con las tablas pobladas, pasará a crear el resto de estructura de la base (PK, Unique Indices, FK, ...) Cuando llega a pasar procedimientos, he hecho un algoritmo para tratar de pasarlos en orden de dependencia. Hace cinco pasadas y reordena los procedimientos lo mejor que puede... Espero que no os falle. A tener en cuenta: Ya que es un proyecto para mis bases de datos, hay alguna cosa que podría fallar y vuestras bases. Si el dominio de un campo de una tabla es IMAGEN, lo crea con el dominio IMAGENES en destino. Si el dominio de un campo de una tabla es IMAGEN_P, lo crea con el dominio IMAGENES en destino. Si el dominio de un campo de una tabla es binario (BLOB SUB_TYPE 0), lo crea con el dominio IMAGENES en destino. Si el dominio de un campo de una tabla es NOTAS_UNICODE, lo crea con el dominio NOTAS en destino. Si el dominio de un campo de una tabla es PROTECCION, lo crea con el dominio NOTAS en destino. Si el dominio de un campo de una tabla es APUNTES, lo crea con el dominio NOTAS en destino. Si el dominio de un campo de una tabla es TEXTO, lo crea con el dominio NOTAS en destino. Si el dominio de un campo de una tabla es blob tipo texto (BLOB SUB_TYPE 1), lo crea con el dominio NOTAS en destino. Si el campo se llama ARTICULO reemplazo ñ, Ñ por N. (En mi base de datos, esto es el código de un artículo y no permito esos caracteres.) Si por algún motivo alguien necesita algo un poco más especial o necesita que quite las transformaciones que he hecho, puede modificar el código y recompilarlo. Si esto no fuera posible, enviarme un mensaje privado y trataré de adaptar el código. Si tampoco fuera posible, y sigue fallando nos ponemos en contacto y si me pasáis vuestra base de datos. Con esto seguro que podré hacer las modificaciones necesarias. Saludos, |
#8
|
|||
|
|||
Cita:
Saludos |
#9
|
|||
|
|||
Cita:
Honestamente eso de Dominio lo lo habia contemplado si no es que lo mencionas pasaría por desapersivido dicha información Casimiro gracias la leí lo útil que es. en Fin de Ascii a otro dipo de Charset todo incurre por los cambios que maneja Firebird si no hubiera incurrido a la necesidad de actualizar a 4.0 creo que todo estaría de maravillas tal cual ha pasado hasta entonces. les comentaré más adelante cómo les fue. Les agradezco enormemente sus aportes a duilioisola y Casimiro Saludos; |
#10
|
||||
|
||||
Creo recordar que está desde la v2.1
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#11
|
|||
|
|||
Correcto amigo;
Pero hay dolores de migrar desde la versión 2.5x a la 3 o 4 de Firebird con los Charset |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
CharSet Firebird | Neeruu | Varios | 5 | 03-09-2016 20:17:23 |
Carácter en Firebird utilizando Charset ASCII | novato_erick | Firebird e Interbase | 7 | 06-08-2015 20:49:33 |
Firebird 2.5 UTF8 | ander | Firebird e Interbase | 11 | 05-06-2013 14:15:07 |
Firebird 2.5 Utf8 Problema Con La ñ | agidar | Firebird e Interbase | 3 | 16-08-2011 19:02:16 |
Firebird 2.5 y UTF8 | Chandra_ | Firebird e Interbase | 14 | 05-11-2010 21:27:44 |
|