2

tengo un problema, se agregaron palabras con acentos directamente a mysql, el problema es que ahora las quiero mostrar en php y me salen con signos de ?, entonces no se si las tengo que subir por php codificadas o que hacer, en php y mysql esta todo en utf8, si me pudieran ayudar, no se si con mb_convert_encoding($subcategoria, 'ISO-8859-1', 'UTF-8'); se podrá hacer algo

2
  • Si está en tu posibilidad, pon tus tablas de mysql en utf8mb4_general_ci. UTF8mb4 es "el estándar" de hoy en día.
    – aeportugal
    Commented el 4 feb. 2023 a las 4:04
  • Si mi respuesta aporto una solucion a tu duda, recuerda marcala como resuelta. Commented el 6 feb. 2023 a las 18:49

1 respuesta 1

3

Existe una serie de propiedades y cosas que se deben tener en cuenta al trabajar con bases de datos y en especial con caracteres especiales:


Estructura/declaración de la base de datos y tablas:

Base de Datos: CHARACTER SET utf8mb4 y COLLATE utf8mb4_general_ci

quedaria asi:

CREATE DATABASE IF NOT EXISTS `tu_base_de_datos` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

Nota: utf8 esta deprecado y se aconseja usar su variante utf8mb4* Link Documentación

Esto también aplica para las tablas en donde tendríamos algo así:

CREATE TABLE `tu_tabla` (
  ...
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=COMPACT;

Nota: nótese la diferencia en donde para la base de datos uso utf8mb4_general_ci y en la tabla utf8mb4_unicode_ci para el COLLATE


Conexión a la base de datos:

Usualmente en mi caso uso PDO para las conexiones a la base de datos y en la conexión hago una serie de declaraciones para mantener y forzar el uso de UTF8 y evitar algún tipo de problema con php:

$conn = new PDO("mysql:host=tu_host;dbname=tu_base_de_datos;charset=utf8mb4", tu_usuario, tu_contraseña);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$conn->beginTransaction();
$conn->exec("set names utf8mb4");

.... //transacciones a ejecutar con exec ...

$conn->commit();

El editor (IDE):

También es importante que tus archivos estén declarado como UTF-8 SIN BOM


Nota: valida que los datos en no muestren caracteres extraños cuando haces el backup... ya que no importa todo lo anterior si los datos ya están corruptos.

2
  • disculpa pero tengo configurada mi base de datos en utf8_spanish_ci esto me generaría algún problema? si no esta en utf8mb4? Commented el 15 feb. 2023 a las 4:30
  • compatibilidad a largo plazo ... Commented el 15 feb. 2023 a las 14:09

¿No es la respuesta que buscas? Examina otras preguntas con la etiqueta o formula tu propia pregunta.