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
-
Si está en tu posibilidad, pon tus tablas de mysql en utf8mb4_general_ci. UTF8mb4 es "el estándar" de hoy en día.– aeportugalCommented el 4 feb. 2023 a las 4:04
-
Si mi respuesta aporto una solucion a tu duda, recuerda marcala como resuelta.– Francisco IA LoverCommented el 6 feb. 2023 a las 18:49
1 respuesta
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.
-
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
-