Tengo una duda sobre PHP y MySQL
Es sobre el tema del cotejamiento. utf8 o latin1
he diseñado una BD con mysql worbench llamada libreria.
-indicando como cotejamiento latin1_general_ci a la bd y a todas las tablas e importando el script en phpmyadmin con el juego de caracteres latin1. notengo problemas al ingresar datos en la BD con ñ y con acentos desde un formulario creado y procesado por php, eso si el caracter € no me lo introduce.
-indicando como cotejamiento utf8_general_ci a la bd y a todas las tablas e importando el script en phpmyadmin con el juego de caracteres utf8. no puedo ingresar datos en la BD con ñ y con acentos desde el formulario html creado y procesado por un archivo php. y si creo un usuario para conectar indicando que pueda conectarse desde cualquier host % no me deja conectarme, solo me deja si creo el usuario indicando que se tiene que conectar desde el localhost...eso con latin1 no me pasa.
Además en las paginas si pongo
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
me muestra los acentos y caracteres como la ñ bien en el texto
pero si pongo
<meta http-equiv="Content-Type" content="text/html; charset=utf8" />
No me los muestra bien esos caracteres en la pagina.
Me he fijado en codigos fuente de webs que no hay ese problema.
archivos
libreriaBD.sql
Código PHP:
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 `libreria` DEFAULT CHARACTER SET latin1 COLLATE latin1_general_ci ;
USE `libreria`;
-- -----------------------------------------------------
-- Table `libreria`.`clientes`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `libreria`.`clientes` (
`clienteID` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
`nombre` VARCHAR(20) NOT NULL ,
`direccion` VARCHAR(45) NOT NULL ,
`ciudad` VARCHAR(40) NOT NULL ,
PRIMARY KEY (`clienteID`) )
ENGINE = InnoDB
DEFAULT CHARACTER SET = latin1
COLLATE = latin1_general_ci
COMMENT = 'Datos del cliente';
-- -----------------------------------------------------
-- Table `libreria`.`pedidos`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `libreria`.`pedidos` (
`pedidoID` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
`clienteID` INT UNSIGNED NOT NULL ,
`fecha` DATE NOT NULL ,
PRIMARY KEY (`pedidoID`, `clienteID`) ,
INDEX `relacion_clientes_pedidos` (`clienteID` ASC) ,
CONSTRAINT `relacion_clientes_pedidos`
FOREIGN KEY (`clienteID` )
REFERENCES `libreria`.`clientes` (`clienteID` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = latin1
COLLATE = latin1_general_ci
COMMENT = 'Lista de pedidos por fecha';
-- -----------------------------------------------------
-- Table `libreria`.`libros`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `libreria`.`libros` (
`ISBN` CHAR(13) NOT NULL ,
`autor` VARCHAR(45) NULL ,
`titulo` VARCHAR(60) NULL ,
`precio` FLOAT(4,2) NULL ,
PRIMARY KEY (`ISBN`) )
ENGINE = InnoDB
DEFAULT CHARACTER SET = latin1
COLLATE = latin1_general_ci
COMMENT = 'Lista de libros';
-- -----------------------------------------------------
-- Table `libreria`.`comentarios_libros`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `libreria`.`comentarios_libros` (
`ISBN` CHAR(13) NOT NULL ,
`comentario` TEXT NULL ,
PRIMARY KEY (`ISBN`) ,
INDEX `relacion_comentarios_libros` (`ISBN` ASC) ,
CONSTRAINT `relacion_comentarios_libros`
FOREIGN KEY (`ISBN` )
REFERENCES `libreria`.`libros` (`ISBN` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = latin1
COLLATE = latin1_general_ci
COMMENT = 'Comentarios libros';
-- -----------------------------------------------------
-- Table `libreria`.`articulos_pedido`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `libreria`.`articulos_pedido` (
`pedidoID` INT UNSIGNED NOT NULL ,
`ISBN` CHAR(13) NOT NULL ,
`cantidad` TINYINT UNSIGNED NOT NULL ,
PRIMARY KEY (`pedidoID`, `ISBN`) ,
INDEX `relacion_pedidos_articulos` (`pedidoID` ASC) ,
INDEX `relacion_articulos_libros` (`ISBN` ASC) ,
CONSTRAINT `relacion_pedidos_articulos`
FOREIGN KEY (`pedidoID` )
REFERENCES `libreria`.`pedidos` (`pedidoID` )
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `relacion_articulos_libros`
FOREIGN KEY (`ISBN` )
REFERENCES `libreria`.`libros` (`ISBN` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = latin1
COLLATE = latin1_general_ci;
SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;