Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

codificacion script

Estas en el tema de codificacion script en el foro de Mysql en Foros del Web. Hola a todos, Tengo un problema y esque tengo un archivo .sql el cual tengo inserts de las tablas ya que es nueva la base ...
  #1 (permalink)  
Antiguo 15/03/2012, 13:31
Avatar de calakra  
Fecha de Ingreso: septiembre-2009
Mensajes: 182
Antigüedad: 15 años, 2 meses
Puntos: 0
Información codificacion script

Hola a todos,

Tengo un problema y esque tengo un archivo .sql el cual tengo inserts de las tablas ya que es nueva la base de datos.

Para crear la base de datos use la siguiente sentencia

CREATE DATABASE base_de_datos DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci

cargo los datos usando la sentencia source;

hasta ahi todo bien, me crea ol abase de datos, las tablas

pero tengo problema con los acentos y la letra Ñ

si realizo in insert desde consola si me respeta acentos y la letra Ñ pero por medio del scrip no me los respeta y pone caracteres especiales,

Espero me puedan ayudar con este problema.

mysql 5.5
SO windows 7
  #2 (permalink)  
Antiguo 15/03/2012, 13:52
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: codificacion script

No es un problema de codificación de script, sino muy probablemente de codificación de archivo.
Fíjate si el archivo donde tienes los datos (el .SQL), está codificado como ANSI o como UTF-8.
Nota: Un "texto plano", no es tan plano... también tiene charset, y MySQL exige UTF-8.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 15/03/2012, 20:25
Avatar de calakra  
Fecha de Ingreso: septiembre-2009
Mensajes: 182
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: codificacion script

Cita:
Iniciado por gnzsoloyo Ver Mensaje
No es un problema de codificación de script, sino muy probablemente de codificación de archivo.
Fíjate si el archivo donde tienes los datos (el .SQL), está codificado como ANSI o como UTF-8.
Nota: Un "texto plano", no es tan plano... también tiene charset, y MySQL exige UTF-8.
Hola.

Lo que me comentaste, ya lo guarde con diferentes codificaciones (ANSI, utf-8.. y los que trae notepad ++) y sigue haciendome los mismo. no me respeta los acentos.

y con la sentencia
show variables like 'character_set%';
me muestra lo siguiente

mysql> show variables like 'character_set%';
+--------------------------+---------------------------------------------------------+
| Variable_name | Value |
+--------------------------+---------------------------------------------------------+
| character_set_client | cp850 |
| character_set_connection| cp850 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | cp850 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | C:\Program Files\MySQL\MySQL Server 5.5hare\charsets\ |


Espero me puedas ayudar, creo que el error esta desde que creo la base de datos o nose, aun asi seguire intentandmo mientras a la vez espero una respuesta..

SALUDOS!!!
  #4 (permalink)  
Antiguo 16/03/2012, 10:01
Avatar de calakra  
Fecha de Ingreso: septiembre-2009
Mensajes: 182
Antigüedad: 15 años, 2 meses
Puntos: 0
Información Respuesta: codificacion script

Hola.

Saben como puedo modificar
character_set_client
character_set_connection
character_set_database
character_set_filesystem
character_set_results
character_set_server
character_set_system
character_sets_dir

aun me sigo peleando!! jajaja si lo resulevo lo postearé aquí!!

Saludos!!
  #5 (permalink)  
Antiguo 16/03/2012, 10:50
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: codificacion script

Pregunta: ¿Los charsets y collation usados por las columnas de las tablas? ¿Los verificaste?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 16/03/2012, 11:49
Avatar de calakra  
Fecha de Ingreso: septiembre-2009
Mensajes: 182
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: codificacion script

Te soy sincero, no se como checar eso, solo lo que he leido y la verdad no encuentro mucho al respecto.

Que es lo que debo de verificar o como debo de crear la base de datos?

Si me puedes ayudar con eso te lo agradeceria mucho.

Saludos.
  #7 (permalink)  
Antiguo 16/03/2012, 12:00
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: codificacion script

Cada tabla de una base tiene su propio charset y collation. Normalmente e charst se hereda del definido para la base, pero se peude indicar a cada tabla y a cada cmpo de carateres uno específico, por lo que el charset por defecto de la base puede no ser operativo para un caso específico.
Normalmente, un script que se cargue con "SOURCE" en MySQL requiere ser creado como UTF-8, pero si los campos de caracteres fuesen Latin-1, por ejemplo, el resultado es catasrófico.
El único modo de ver qué estructura tiene una tabla es usando un editor como MySQL Workbench, MySQL Query Browser, phpMyadmin o algo así. De lo contrario deberás recapturar la creación de cada tabla con
Código MySQL:
Ver original
  1. SHOW CREATE TABLE nombreDeTabla;
La pregunta que cabe es: ¿Cómo se creó ese script? ¿Lo hiciste tu, o es un backup de algo?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 16/03/2012, 13:21
Avatar de calakra  
Fecha de Ingreso: septiembre-2009
Mensajes: 182
Antigüedad: 15 años, 2 meses
Puntos: 0
Información Respuesta: codificacion script

Ok, mira ahi te van las sentencias que ocupo.

para crear la base de datos ocupo el siguiente
CREATE DATABASE base DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci

al momento de crear las tablas es por medio de un script que crea workbench que primero crea el shema (si no existe)

CREATE SCHEMA IF NOT EXISTS `base` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ;

y despues las tablas

CREATE TABLE IF NOT EXISTS `base`.`tabla` (
`campo1` SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT ,
`campo2` VARCHAR(45) NOT NULL ,
PRIMARY KEY (`campo1`) )
ENGINE = InnoDB DEFAULT CHARSET=utf8;

y asi es como se crea la base. cuando cargo los datos es cuando viene el error, investigando un poco dicen que tengo que modificar el archivo conf que no tengo ya que en mi equipo solo se cre el my.ini que no trae las opciones que dice que modifique, y pues ya ando perdido.

Gracias!!!
  #9 (permalink)  
Antiguo 16/03/2012, 13:30
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: codificacion script

No me contestaste esto:
Cita:
¿Cómo se creó ese script? ¿Lo hiciste tu, o es un backup de algo?
Obviamente me refiero al script de datos, y no al shema creado por Workbench...
Depende de cómo se crea, puede haber algunos problemas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #10 (permalink)  
Antiguo 16/03/2012, 16:46
Avatar de calakra  
Fecha de Ingreso: septiembre-2009
Mensajes: 182
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: codificacion script

Ha ok.

Deja me explico lo mjor posible y te describiré cada uno de mis pasos

en consola creo la base de datos escribiendo lo siguiente:
CREATE DATABASE base DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

posterior a eso entro a la base de datos desde comando
use base_datos

despues ejecuto el scrip que obtengo de workbench mysql el cual contiene lo siguiente

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';

CREATE SCHEMA IF NOT EXISTS `base_datos` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ;
USE `base_datos` ;


CREATE TABLE IF NOT EXISTS `base_datos`.`rol` (
`rol_id` SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT ,
`rol_etiqueta` VARCHAR(45) NOT NULL ,
`rol_permisos` VARCHAR(100) NULL ,
`rol_status` SMALLINT UNSIGNED NULL ,
PRIMARY KEY (`rol_id`) )
ENGINE = InnoDB;

CREATE TABLE IF NOT EXISTS `base_datos`.`catalogo` (
.
.
.
.
.
SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;


lo anterior es creado por worbench mysql

una vez terminado la creacion de las tablas procedo a usar otro script el cual realiza inserts en las tablas y ahi lo unico que hace son sentencias insert sin mas.

Espero que con esto quede un poco mas claro de cual es mi proceso de creacion de mi base de datos.

Gracias por la ayuda!!
  #11 (permalink)  
Antiguo 16/03/2012, 20:58
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: codificacion script

Cita:
una vez terminado la creacion de las tablas procedo a usar otro script el cual realiza inserts en las tablas y ahi lo unico que hace son sentencias insert sin mas.
Esto es lo que me interesa, porque es donde se produce el problema.
El resto no es relevante, desde el momento en que el script generado por Workbench siempre está bien construido. Y lo digo por experiencia personal.
Pero si me interesa desde dónde se obtiene el otro. Y es lo que hasta ahora no me has respondido.

Lo que quiero que te quede claro es que el problema no está en la creación de la base. Está en los datos, que no se llevan bien con la base.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #12 (permalink)  
Antiguo 20/03/2012, 10:02
Avatar de calakra  
Fecha de Ingreso: septiembre-2009
Mensajes: 182
Antigüedad: 15 años, 2 meses
Puntos: 0
Información Respuesta: codificacion script

Hola, ya entendi, ese script yo lo hice usando notepad++

y basicamente trae inserts como este

insert into rol (rol_id, rol_etiqueta, rol_status) values (1,'ADMINISTRADOR',1);

insert into catalogo ( cat_id, cat_etiqueta, cat_tipo, cat_orden, cat_dependiente, cat_status, cat_fecha_alta, cat_hora_alta, cat_creador, cat_fecha_modificacion, cat_hora_modificacion , cat_modificador) values (17,'CAÑON','EQUIPO_TIPO', 9,null,1,curdate(),CURTIME(),null,curdate(),CURTIM E(),null);

Es lo unico que tiene ese archivo, este archivo ya lo guarde como utf8 y aun asi siguen saliendo los errores en las Ñ

Que crees que pueda ser?
  #13 (permalink)  
Antiguo 21/03/2012, 09:51
Avatar de calakra  
Fecha de Ingreso: septiembre-2009
Mensajes: 182
Antigüedad: 15 años, 2 meses
Puntos: 0
Información Respuesta: codificacion script

Hola buscando en la red, me dicen que cambie los siguientes parametros
character-set-server=utf8
collation-server=utf8_unicode_ci
default-character-set=utf8
default-collation=utf8_unicode_ci

los cuales se encuentran en my.ini (estoy en windows 7) pero no estan, solo esta
character-set-server=utf8 (el cual esta bien)
default-character-set=utf8 (el cual esta bien)

pero las otras no las encuentro, por lo que tengo dos preguntas,

- ¿ las agrego al archivo y en caso de ser positivo como reinicio o que tengo qeu hacer para que se reflejen los cambios?

Última edición por calakra; 21/03/2012 a las 11:50 Razón: mas informacio0n
  #14 (permalink)  
Antiguo 21/03/2012, 13:44
Avatar de calakra  
Fecha de Ingreso: septiembre-2009
Mensajes: 182
Antigüedad: 15 años, 2 meses
Puntos: 0
Información Respuesta: codificacion script

Pues creo que ya le avance algo pero aun tengo un error y pues para variar estoy atorado

lo que pasa es lo siguiente, entro a mysql y pongo el siguiente

por script que yo realice esta el siguiente codigo

Código SQL:
Ver original
  1. CREATE  TABLE IF NOT EXISTS `SSA`.`rol1` (
  2.   `rol_id` SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT ,
  3.   `rol_etiqueta` VARCHAR(45)  NOT NULL ,
  4.   `rol_permisos` VARCHAR(100)  NULL ,
  5.   `rol_status` SMALLINT UNSIGNED NULL ,
  6.   PRIMARY KEY (`rol_id`) )
  7. ENGINE = InnoDB DEFAULT CHARSET=utf8;

y lo ejecuto con el siguiente comando

mysql> source c:\script\tablas1.sql

porterior a eso tengo el archivo el cual inserta en la tabla (el archivo tiene una codificacion utf8) el cual tiene lo siguiente
Código MySQL:
Ver original
  1. /*Se inserta en la tabla de roles;*/
  2. insert into rol1 (rol_etiqueta,rol_permisos) values ('año','AÑO');
  3. insert into rol1 (rol_etiqueta,rol_permisos) values ("año","AÑO");

lo ejecuto con la siguiente comando

mysql> source c:\script\insert.sql

vemos el resultado y es el siguiente

mysql> select * from rol1;
+--------+--------------+--------------+------------+
| rol_id | rol_etiqueta | rol_permisos | rol_status |
+--------+--------------+--------------+------------+
| 1 | año | AÑO | NULL |
| 2 | año | AÑO | NULL |
+--------+--------------+--------------+------------+

despues pongo el siguiente comando que busque por internet

SET LOCAL character_set_client='utf8';
SET @@local.character_set_client='utf8';

vuelvo a insertar

mysql> source c:\script\insert.sql

y reviso la tabla

mysql> select * from rol1;
+--------+--------------+--------------+------------+
| rol_id | rol_etiqueta | rol_permisos | rol_status |
+--------+--------------+--------------+------------+
| 1 | año | AÑO | NULL |
| 2 | año | AÑO | NULL |
| 3 | año | AÑO | NULL |
| 4 | año | AÑO | NULL |
+--------+--------------+--------------+------------+

si nos damos cuenta ahi aparece bien la letra Ñ

ahora si desde consola inserto dos registros mas

mysql> insert into rol1 (rol_etiqueta,rol_permisos) values ("año","AÑO");
mysql> insert into rol1 (rol_etiqueta,rol_permisos) values ("año","AÑO");

al realizar la consulta queda de la siguiente forma


mysql> select * from rol1;
+--------+--------------+--------------+------------+
| rol_id | rol_etiqueta | rol_permisos | rol_status |
+--------+--------------+--------------+------------+
| 1 | año | AÑO | NULL |
| 2 | año | AÑO | NULL |
| 3 | año | AÑO | NULL |
| 4 | año | AÑO | NULL |
| 7 | a?o | A?O | NULL |
| 8 | a?o | A?O | NULL |
+--------+--------------+--------------+------------+

ahora el año aprace "a?o"

No se que es lo que pase o que onda, que es donde le debo mover???

por que ahora solo agrega las Ñ cuando es por script, pero desde consola al agregar un registro la letra ahora es ?

y en las consultas pues claro que no me respeta

En donde estará mal???

Última edición por calakra; 21/03/2012 a las 13:46 Razón: eror al poner tabla

Etiquetas: codificacion, scrit_mysql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:40.