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

charset=utf-8, las tildes y eñes y utf8_spanish_ci

Estas en el tema de charset=utf-8, las tildes y eñes y utf8_spanish_ci en el foro de Mysql en Foros del Web. Me tiene un tanto desconcertado el tema, He comenzado a usar Código: <meta http-equiv="Content-Type" content="text/html; charset= utf-8 " /> que soluciona muchos mas problemas con ...
  #1 (permalink)  
Antiguo 20/05/2009, 00:11
 
Fecha de Ingreso: mayo-2007
Mensajes: 140
Antigüedad: 16 años, 11 meses
Puntos: 6
charset=utf-8, las tildes y eñes y utf8_spanish_ci

Me tiene un tanto desconcertado el tema,

He comenzado a usar
Código:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
que soluciona muchos mas problemas con los acentos y eñes que
Código:
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />
Pero no consigo encontrar el tipo de codificación para importar a la base de datos y que sea compatible.

Usando al importar "Juego de caracteres del archivo" utf8 y la base de datos como: utf8_spanish_ci con salen simbolillos raros, tipo "�e�o" , aunque la base de datos se ve perfecta,

Los archivos estan en .txt

Si pudierais pegar algun ejemplo del tipo sería de agradecer:


Código PHP:
CREATE TABLE IF NOT EXISTS `soluciontildes` (
  `
tildes_idint(7NOT NULL AUTO_INCREMENT,
  `
nombrevarchar(50COLLATE ucs2_spanish_ci NOT NULL,
  `
apellido1varchar(50COLLATE ucs2_spanish_ci NOT NULL,
  `
apellido2varchar(50COLLATE ucs2_spanish_ci NOT NULL,
  
PRIMARY KEY (`tildes_id`)
ENGINE=MyISAM  DEFAULT CHARSET=ucs2 COLLATE=ucs2_spanish2_ci AUTO_INCREMENT=;


INSERT INTO `soluciontildes` (`tildes_id`, `nombre`, `apellido1`, `apellido2`) VALUES
(1'josé''García''pérez'),
(
2'peña''Marcial''Estefanía'); 
__________________
calcular Calculadora hipoteca
  #2 (permalink)  
Antiguo 20/05/2009, 08:18
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: charset=utf-8, las tildes y eñes y utf8_spanish_ci

Tu problema es este:
Cita:
Los archivos estan en .txt
Tu archivo txt tiene una codificación distinta y el texto importado conservará esa codificación. Si guardas ese archivo en codificación utf8, resolverás, creo, el problema. Mira en guardar como. Lo puedes hacer con el bloc de notas si no usas un editor profesional. Guarda en codificación UTF-8, y luego importa desde PHPMyADMIN.
  #3 (permalink)  
Antiguo 20/05/2009, 16:20
 
Fecha de Ingreso: mayo-2007
Mensajes: 140
Antigüedad: 16 años, 11 meses
Puntos: 6
Respuesta: charset=utf-8, las tildes y eñes y utf8_spanish_ci

la verdad que ya no se,
cambié en el editor para que guardara utf8 y el problema persiste.

lo curioso es que si visualizo o exporto la base de datos mantiene las ñ y las tildes, Y se visualiza correctamente si en la cabecera PONGO
Cita:
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
.

Pero al poner utf-8 es cuando salen extraños en pantalla:
Cita:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
(la insistencia en usar utf-8 es que se corrigen otros problemas en el uso de las ñ y tildes largos de contar aquí)
__________________
calcular Calculadora hipoteca

Última edición por aleluya; 20/05/2009 a las 16:42
  #4 (permalink)  
Antiguo 21/05/2009, 01:13
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: charset=utf-8, las tildes y eñes y utf8_spanish_ci

pero ¿cuál es el charset y collation con los que creaste la base y las tablas?
escribe

SHOW CREATE DATABASE nombredetubase

y también
SHOW CREATE TABLE nombredetabla

Lo primero es saber lo que creaste y cómo lo creaste.

Por otra parte, me parece que no es utf-8, sino ucs2, más parecido a utf-16, lo que estás utilizando. Ambas son unicode, pero, al parecer, no exactamente lo mismo.

Última edición por jurena; 21/05/2009 a las 01:24
  #5 (permalink)  
Antiguo 23/05/2009, 09:21
 
Fecha de Ingreso: mayo-2007
Mensajes: 140
Antigüedad: 16 años, 11 meses
Puntos: 6
Respuesta: charset=utf-8, las tildes y eñes y utf8_spanish_ci

Gracias por tu tiempo.

hice varias pruebas con el mismo resultado.
Código:
+----------+------------------------------------------------------------------+
| Database | Create Database                                                  |
+----------+------------------------------------------------------------------+
| dwcs3    | CREATE DATABASE `tildes` /*!40100 DEFAULT CHARACTER SET latin1 */ |

+----------+------------------------------------------------------------------+

mysql> show create database tildes
    -> ;
--------------------------------------------------------------------------------
-------+
| autores | CREATE TABLE `autores` (
  `autor_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `nombre` varchar(30) COLLATE latin1_spanish_ci DEFAULT NULL,
  `apellidos` varchar(30) COLLATE latin1_spanish_ci NOT NULL,
  PRIMARY KEY (`autor_id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=latin1 COLLATE=latin1_spanish_
ci |
+---------+---------------------------------------------------------------------

Código:
+----------+------------------------------------------------------------------+
| dwcs3    | CREATE DATABASE `tildes` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE
 utf8_spanish_ci */ |
+----------+--------------------------------------------------------------------
--------------------+

+----------+------------------------------------------------------------------+
-----------------------------------------------------------------+
| autores | CREATE TABLE `autores` (
  `autor_id` int(7) NOT NULL AUTO_INCREMENT,
  `nombre` varchar(30) COLLATE utf8_spanish_ci NOT NULL,
  `apellidos` varchar(30) COLLATE utf8_spanish_ci NOT NULL,
  PRIMARY KEY (`autor_id`)
) ENGINE=MyISAM AUTO_INCREMENT=11 DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci |
__________________
calcular Calculadora hipoteca
  #6 (permalink)  
Antiguo 23/05/2009, 09:28
 
Fecha de Ingreso: mayo-2007
Mensajes: 140
Antigüedad: 16 años, 11 meses
Puntos: 6
Respuesta: charset=utf-8, las tildes y eñes y utf8_spanish_ci

si te parece te pego aqui la base de datos y el php de unos tutoriales que pense podian tenerlo solucionado.

Código:
-- phpMyAdmin SQL Dump
-- version 3.1.1
-- http://www.phpmyadmin.net
--
-- Servidor: localhost
-- Tiempo de generación: 23-05-2009 a las 17:20:18
-- Versión del servidor: 5.1.30
-- Versión de PHP: 5.2.8

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

--
-- Base de datos: `tilde`
--

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `autores`
--

CREATE TABLE IF NOT EXISTS `autores` (
  `autor_id` int(7) NOT NULL AUTO_INCREMENT,
  `nombre` varchar(30) COLLATE utf8_spanish_ci NOT NULL,
  `apellidos` varchar(30) COLLATE utf8_spanish_ci NOT NULL,
  PRIMARY KEY (`autor_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci AUTO_INCREMENT=11 ;

--
-- Volcar la base de datos para la tabla `autores`
--

INSERT INTO `autores` (`autor_id`, `nombre`, `apellidos`) VALUES
(1, 'José', 'Pérez'),
(4, 'Andrés', 'Caño'),
(5, 'niño', 'García'),
(7, '', 'Sócrates'),
(8, 'García', 'Márquez'),
(9, 'peña', 'España'),
(10, 'Joaquín', 'Sabina');
Código PHP:
<?php require_once('Connections/tutorial.php'); ?>
<?php
if (!function_exists("GetSQLValueString")) {
function 
GetSQLValueString($theValue$theType$theDefinedValue ""$theNotDefinedValue ""
{
  
$theValue get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;

  
$theValue function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

  switch (
$theType) {
    case 
"text":
      
$theValue = ($theValue != "") ? "'" $theValue "'" "NULL";
      break;    
    case 
"long":
    case 
"int":
      
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case 
"double":
      
$theValue = ($theValue != "") ? "'" doubleval($theValue) . "'" "NULL";
      break;
    case 
"date":
      
$theValue = ($theValue != "") ? "'" $theValue "'" "NULL";
      break;
    case 
"defined":
      
$theValue = ($theValue != "") ? $theDefinedValue $theNotDefinedValue;
      break;
  }
  return 
$theValue;
}
}

$currentPage $_SERVER["PHP_SELF"];

$maxRows_listaAutores 5;
$pageNum_listaAutores 0;
if (isset(
$_GET['pageNum_listaAutores'])) {
  
$pageNum_listaAutores $_GET['pageNum_listaAutores'];
}
$startRow_listaAutores $pageNum_listaAutores $maxRows_listaAutores;

mysql_select_db($database_tutorial$tutorial);
$query_listaAutores "SELECT * FROM autores ORDER BY autores.apellidos, autores.nombre";
$query_limit_listaAutores sprintf("%s LIMIT %d, %d"$query_listaAutores$startRow_listaAutores$maxRows_listaAutores);
$listaAutores mysql_query($query_limit_listaAutores$tutorial) or die(mysql_error());
$row_listaAutores mysql_fetch_assoc($listaAutores);

if (isset(
$_GET['totalRows_listaAutores'])) {
  
$totalRows_listaAutores $_GET['totalRows_listaAutores'];
} else {
  
$all_listaAutores mysql_query($query_listaAutores);
  
$totalRows_listaAutores mysql_num_rows($all_listaAutores);
}
$totalPages_listaAutores ceil($totalRows_listaAutores/$maxRows_listaAutores)-1;

$queryString_listaAutores "";
if (!empty(
$_SERVER['QUERY_STRING'])) {
  
$params explode("&"$_SERVER['QUERY_STRING']);
  
$newParams = array();
  foreach (
$params as $param) {
    if (
stristr($param"pageNum_listaAutores") == false && 
        
stristr($param"totalRows_listaAutores") == false) {
      
array_push($newParams$param);
    }
  }
  if (
count($newParams) != 0) {
    
$queryString_listaAutores "&" htmlentities(implode("&"$newParams));
  }
}
$queryString_listaAutores sprintf("&totalRows_listaAutores=%d%s"$totalRows_listaAutores$queryString_listaAutores);
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento sin t&iacute;tulo</title>
<style type="text/css">
<!--
#recNav {
    width: 400px;
}
.alinDerecha {
    text-align: right;
}
-->
</style>
</head>

<body>
<h1>Autores Registrados</h1>
<table width="450" border="0">
  <tr>
    <td><div align="center"><strong>Autor</strong></div></td>
  </tr>
  <?php do { ?>
    <tr>
      <td><?php echo $row_listaAutores['nombre']; ?> <?php echo $row_listaAutores['apellidos']; ?></td>
    </tr>
    <?php } while ($row_listaAutores mysql_fetch_assoc($listaAutores)); ?>
</table>

<p>&nbsp;</p>
</body>
</html>
<?php
mysql_free_result
($listaAutores);

?>
y como verás el resultado es este:
__________________
calcular Calculadora hipoteca
  #7 (permalink)  
Antiguo 23/05/2009, 12:19
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: charset=utf-8, las tildes y eñes y utf8_spanish_ci

a ver, aleluya.
Tu problema no es realmente de base de datos ahora, una vez que tienes codificada la base en utf8. El problema es el documento en el que muestras los datos, el php y el modo en el que envías al servidor.
Tras seleccionar la base, en la línea siguiente escribes esto:
mysql_query("set names 'utf8'");

además, guardas el archivo php donde haces el echo en codificación utf8

Y luego nos dices.

Por supuesto, quita el meta de ISO-8859-1 y deja el de utf8.

No pongas código PHP en este foro: no debe hacerse y podrían eliminar el hilo. Intentaremos orientarte en todo lo que tiene que ver con MySQL, y si es necesario algo de PHP te remitiremos al foro PHP.
  #8 (permalink)  
Antiguo 27/05/2009, 11:14
 
Fecha de Ingreso: mayo-2007
Mensajes: 140
Antigüedad: 16 años, 11 meses
Puntos: 6
Respuesta: charset=utf-8, las tildes y eñes y utf8_spanish_ci

Gracias, GRACIAS,

Por fin lo solucione,
Si no hubiera sido por tu paciencia y consejos hubiera tirado la toalla.


Como bien dices "ya" no era problema de base de datos.

Lo desconcertante es que se mezclan varios problemas y es complicado localizar donde están,

una cosa que creo que ocurre es que se desconfiguraran los navegadores. Conseguía ver una página correctamente, y al hacer otra prueba salia mal y ya la anterior también salia mal sin que se hubiera cambiado el código ni tocado la base de datos.....

Creo que esto ha sido la solución radical "mysql_query("set names 'utf8'");" es un mata desconfiguraciones....

de veras , gracias, por tanta paciencia.
__________________
__________________
calcular Calculadora hipoteca
  #9 (permalink)  
Antiguo 29/05/2009, 03:44
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: charset=utf-8, las tildes y eñes y utf8_spanish_ci

aleluya,
me alegro, aunque realmente "set names 'utf8'" es una solución propia de gente que, como yo, no controla del todo bien las codificaciones. Pero funciona en muchos casos, es cierto.
Saludos
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.
Tema Cerrado




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