OT: acentos en MySQL

69 views
Skip to first unread message

QuiQue

unread,
Nov 18, 2008, 11:59:57 AM11/18/08
to jav...@googlegroups.com, servl...@elistas.net
hola list@ y perdon por el OT
 
tengo una base de datos MySQL 5 definida como latin1 y con colacion en latin1_swedish_c1 que es la que viene por defecto.

tengo campos varchar con acentos y se guardan bien en base de datos y se ven bien cuando los pinto en un jsp, pero cuando el campo es blob se guarda bien en base de datos pero al visualizarlos en un jsp en lugar de la vocal con el acento lo que me pinta es un interrogante (en lugar de Descripción me pinta Descripci?n)

he probado a poner la colacion a latin1_spanish y en lugar de un ? se visualiza un cuadradito pequeñito.

tambien he probado a poner la tabla en lugar de latin1 a latin2 (que he leido que es la de español) pero en lugar de un ? me pinta 2 ?

alguien sabe como puede visulizar bien los blobs de mysql en un jsp???

--

saludos

QuiQue

Pablo Saavedra

unread,
Nov 18, 2008, 12:08:23 PM11/18/08
to jav...@googlegroups.com
El problema es como lees los blobs me parece. Si no me equivoco, está construyendo un String a partir del byte[] que hay en el blob. Lo que tenés que hacer es pasarle latin-1 (iso-8859-1?) como character encoding cuando construis el string.

Exactanmente como., no se.

Saludos.

2008/11/18 QuiQue <quiqu...@gmail.com>

Daniel González

unread,
Nov 18, 2008, 12:15:46 PM11/18/08
to jav...@googlegroups.com
>>
>> tengo una base de datos MySQL 5 definida como latin1 y con colacion en
>> latin1_swedish_c1 que es la que viene por defecto.
>>

A proposito.... alguien sabe por que este es el charset por defecto?

Pablo Ruggia

unread,
Nov 18, 2008, 12:50:41 PM11/18/08
to jav...@googlegroups.com
Como transformas el BLOB en un String ? Si podes pegame el codigo que usas para hacer eso.

El tema es asi, un Blob es un conjunto de bytes, no de caracteres.
Vos de alguna manera tenes que transformar tu stream de bytes a caracteres en UTF-16, que es lo que usa java internamente para representar caracteres.

Supongamos que tenes un array the bytes y lo queres transformar a un String, hace esto:

  byte[] misBytes = sacarBytesDelBlobl();
  Charset charset = Charset.forName("ISO-8859-1");
  CharBuffer cb = charset.decode(ByteBuffer.wrap(misBytes));
  String resultado = cb.toString();

Desde ya que el codigo de arriba es altamente ineficiente para strings muy muy largos y vas a tener que reusar algunos objetos y stremear los bytes al decoder en vez de pasarle un solo gran array de bytes, pero la idea general esta bien y deberias poder ver sin problema los caracteres.

Saludos !

Jerónimo Vázquez

unread,
Nov 18, 2008, 1:06:33 PM11/18/08
to jav...@googlegroups.com
Hace lo mas facil reemplaza los acentos

SELECT
          REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(CAMPO, 'Á', 'A'), 'É', 'E'), 'Í', 'I'), 'Ó', 'O'), 'Ú', 'U')
FROM
          TABLA

as1

unread,
Nov 21, 2008, 5:47:19 PM11/21/08
to JavaSOS
Dos cosas:

Primero debes usan CLOB para almacenar testos y BLOB para almacenar
binarios como archivos, imagnenes, etc.

Segundo debes setear bien el header en el jsp <%@ page
contentType="text/html; charset=UTF-8" %> para UTF8 y <%@ page
contentType="text/html; charset=ISO-8859-1" %> para Lain1

Saludos
Reply all
Reply to author
Forward
0 new messages