Informática-Computación

MySQL – MariaDB Ya no uses UTF8 mejor usa utf8mb4

MySQL UTF8 es un formato estándar para almacenar caracteres Unicode. UTF8 utiliza una secuencia única de 1, 2, 3 bytes para codificar cada carácter en el juego de caracteres Unicode.

MySQL utf8mb4 significa que usa un máximo de 4 bytes por carácter, soportando carácteres suplementarios.

  • Con la llegada de MySQL 8 se está mejorando el rendimiento de utf8mb4 y será establecido como conjunto de caracteres predeterminado.

Para entender más sobre el tema, nos vamos a situar en un problema real donde necesitamos instalar una aplicación. La aplicación que estamos instalando es Moodle, que es una herramienta de Gestión de Aprendizaje Online.

Cuando el programa procede a pedirnos los requerimientos de nuestra base de datos, se nos avisa de que es obligatorio un juego de caracteres utf8md4. La razón es porqué Moodle usa símbolos Unicode para guardar emojis y estos exceden el espacio máximo por carácter establecido por la codificación Utf8.

Cada emoji se compone de 4 bytes (xF0x9Fx98x89) y estos exceden el tamaño máximo por carácter de 3 bytes de la codificación Utf8.

Conclusión: Todos los usuarios de MySQL y MariaDB que están utilizando actualmente “utf8” deberían utilizar “utf8mb4”. Nadie debería usar “utf8”.

Moodle La Instalación debe finalizarse desde la misma dirección IP original

error/admin/installhijacked

Este error compara $adminuser->lastip con la dirección IP actual del usuario.

Esto ocurrirá si un sitio ha sido instalado en un servidor mediante los scripts de la interfaz por línea de comando en admin/cli (install_database.php o install.php). Después de instalar el sitio remotamente, el visitar el sitio mediante un navegador web (con una IP diferente) disparará el mensaje de error.

Solución:

Actualice directamente la BasedeDatos con su dirección IP actual (table: mdl_user, field: lastip, SQL: UPDATE mdl_user set lastip=’159.245.48.2′ en donde username=’admin’;).

Moodle piensa que se cambió la dirección IP de donde originalmente se comenzó la instalación del paquete.

Para los que usan servidores de Amazon AWS EC2: la instalación debe finalizar desde la dirección IP original.

Leyendo el código fuente, es posible que haya descubierto que el mensaje proviene de las siguientes líneas:

if ($adminuser->lastip !== getremoteaddr()) {
    print_error('installhijacked', 'admin');
}

Si bien comentar el código puede hacer que supere ese punto de la instalación, el problema eventualmente volverá a atormentarlo y ni siquiera se dará cuenta de que está relacionado. El problema es que la función getremoteaddr() de Moodle, que se usa en todas partes en Moodle y es responsable de identificar su dirección IP en Moodle, continuará informando una dirección IP incorrecta en cosas como registros e incluso puede afectar la seguridad de su sitio web.

Un mejor enfoque es simplemente agregar la siguiente línea al archivo config.php principal de su Moodle ubicado en webroot. La línea debe colocarse en cualquier lugar entre $CFG = new stdClass(); y require_once(__DIR__ . ‘/lib/setup.php’); linea:

$CFG->getremoteaddrconf = 0;

Si no funciona prueba con 1, 2, 3

Esto deberá agregarse durante la instalación después de que Moodle haya creado su archivo config.php, hasta el momento en que reciba el mensaje de error. Esta configuración hará que Moodle identifique correctamente su dirección IP utilizando la variable de servidor Apache HTTP_X_FORWARDED_FOR en lugar de REMOTE_ADDR y permitirá que continúe la instalación.

Si bien no he intentado lo siguiente, también puede agregar esa línea a un archivo llamado /local/defaults.php (crear si aún no existe).

Para obtener más información sobre defaults.php, consulte https://docs.moodle.org/dev/Local_plugins#Customised_site_defaults

Este archivo defaults.php puede ser útil para establecer la configuración predeterminada durante una nueva instalación si lo incluye en su bifurcación de Moodle.

La línea en defaults.php podría ser:

$defaults['moodle']['getremoteaddrconf'] = 0;  // New default for $CFG->getremoteaddrconf
En mi experiencia algo que no me permitía superar ese mensaje era la codificación de la base de datos, pues la tenía en utf8mb4_spanish_ci y aún configurado nada que pasaba, la cambie a utf8mb4_unicode_ci y listo funciono perfectamente.