martes, 7 de abril de 2020

phpmyadmin, cambiar el cotejamiento de una base de datos

En este manual vamos a cambiar el cotejamiento de una base de datos desde el gestor de bases de datos phpmyadmin.

Al final de todo el proceso se explica que es la codificación de caracteres, que es el código ANSI, que es el ISO-8859, que es la norma Unicode, que es UTF-8,  que es UTF8mb4 y por supuesto que es el cotejamiento.

Para poder cambiar el cotejamiento a una base de datos, tienes que ser administrador o tener los permisos necesarios para poder cambiar el cotejamiento. En este manual lo vamos hacer con el usuario administrador.

1- Nos logeamos como usuario administrador en phpMyAdmin.


2- Seleccionamos la base de datos a la que tenemos que cambiar el cotejamiento, en el menú de la izquierda.
En este manual vamos a cambiar el cotejamiento de: utf8mb4_general_ci a utf8mb4_spanish_ci de la base de datos llamada: nuevo_nombre.

3- Observamos que en el apartado Bases de datos, hemos seleccionado la base de datos llamada nuevo_nombre, que he marcado con un rectángulo rojo y se encuentra tanto en la columna de la izquierda como de la derecha.
Vamos al apartado Operaciones que también he marcado con un rectángulo rojo y una flecha.


4- En esta página, bajamos hasta el apartado: Cotejamiento, este es el apartado que nos interesa a nosotros, (aquí tenemos que seleccionar el cotejamiento, y luego tenemos que hacer clic en Continuar) pero antes vamos a marcar la opción: Modificar el cotejamiento de todas las tablas.



5- Ahora si es el momento de cambiar el cotejamiento, de: utf8mb4_general_ci por utf8mb4_spanish_ci en el menú desplegable, marcado con el número 1




6- Podemos observar como se ha quedado seleccionada la opción utf8mb4_spanish_ci, y ahora pulsamos en Continuar



7- Al pulsar en continuar, nos aparece un mensaje emergente en pantalla, en el cual nos informa: Su consulta se ejecutó con éxito.



8- Por ultimo solo nos queda volver al apartado Base de datos, de la ventana principal, para ver mas claro como a la base de datos llamada: nuevo_nombre, le hemos cambiado perfectamente el cotejamiento a: utf8mb4_spanish_ci



A continuación explicamos que es la codificación de caracteres, que es el código ANSI, que es el ISO-8859, que es la norma Unicode, que es UTF-8,  que es UTF8mb4 y por supuesto que es el cotejamiento.



Codificación de caracteres
La codificación de caracteres (character encoding) es el método que permite convertir un carácter de un lenguaje (alfabeto) en un símbolo de otro sistema de representación, como un número, un símbolo o una secuencia de pulsos eléctricos en un sistema electrónico, aplicando una serie de normas o reglas de codificación. Vamos a centrarnos en cómo los sistemas informáticos utilizan la codificación de caracteres para convertir y representar los diferentes lenguajes escritos del mundo a una representación que los sistemas informáticos entiendan, para poder almacenar o transmitir dicha información.

La codificación de caracteres se basa en definir tablas que indiquen el carácter en el lenguaje natural y su correspondencia en el lenguaje del sistema informático. Estas tablas se denominan conjunto de caracteres (charset o character set), mapa de caracteres (character map) o página de códigos (page code).


Conjunto de caracteres más comunes
Los conjuntos de caracteres universales, mas usados antes de la aparición de los sistemas informáticos (pc), son: el código morse, el braile y las banderas de señales marítimas.


Código ASCII
El conjunto de caracteres ASCII (American National Standard Code for Information Interchange) publicado por el ANSI como estándar en 1967, se diseñó en un principio utilizando solamente 7 bits, para dejar el octavo bit para la paridad (control de errores), por lo que solamente puede representar 128 caracteres, suficientes para incluir mayúsculas y minúsculas del abecedario inglés, además de cifras, puntuación y algunos caracteres de control.


Norma ISO-8859
Pero ASCII no incluye los caracteres acentuados ni el comienzo de interrogación que se usa en castellano, ni tantos otros símbolos (matemáticos, letras griegas, etc.) que son necesarios en muchos contextos. Por lo que surgió la norma ISO 8859 que utiliza 8 bits y que, por tanto, permite 256 caracteres, suficientes para abarcar los caracteres de un lenguaje en concreto. En ellos, los 128 caracteres primeros son los mismos de la tabla ASCII original y los 128 siguientes se corresponden a símbolos extra añadidos. Se publicó su primera revisión en 1985.

Esta codificación es conocida en ocasiones como ASCII extendido.

Sin embargo 8 bits siguen siendo insuficientes para codificar todos los alfabetos conocidos, por lo que cada zona tiene que usar su propia especialización de la norma ISO 8859, surgiendo la lista siguiente:

   - ISO 8859-1 (Latin-1) Europa occidental.
   - ISO 8859-2 (Latin-2) Europa occidental y Centroeuropa.
   - ISO 8859-3 (Latin-3) Europa occidental y Europa del Sur.
   - ISO 8859-4 (Latin-4) Europa occidental y países bálticos (lituano, estonio y lapón).
   - ISO 8859-5 Alfabeto cirílico.
   - ISO 8859-6 Árabe.
   - ISO 8859-7 Griego.
   - ISO 8859-8 Hebreo.
   - ISO 8859-9 (Latin-5) Europa occidental con el juego de caracteres turco.
   - ISO 8859-10 (Latin-6) Europa occidental con juegos de caracteres nórdico, lapón y esquimal.
   - ISO 8859-11 Tailandés.
   - ISO 8859-13 (Latin-7) Idiomas bálticos y polaco.
   - ISO 8859-14 (Latin-8) Idiomas celtas (gaélico, irlandés, escocés, welsh).
   - ISO 8859-15 (Latin-9) Añade el símbolo de Euro y otros a ISO 8859-1.
   - ISO 8859-16 Idiomas centroeuropeos (polaco, checo, eslovaco, húngaro, albano, rumano, alemán e italiano).

A algunas revisiones se les ha dado un segundo nombre con el que podemos encontrarlo también cuando se hace referencia a él, por ejemplo, al conjunto de caracteres ISO 8859-15 también se le da el nombre Latin-9. En la lista anterior aparecen reflejados.


Norma Unicode
Como solución a los problemas de que ningún conjunto de caracteres recogía todos los lenguajes mundiales, desde 1991 se ha acordado internacionalmente crear y utilizar la norma Unicode, que es una gran tabla, que en la actualidad asigna un código a cada uno de los más de cincuenta mil símbolos que posee, los cuales abarcan todos los alfabetos europeos, ideogramas chinos, japoneses, coreanos, muchas otras formas de escritura, lenguas muertas y más de un millar de símbolos especiales.

Este estándar es mantenido por el Unicode Technical Committee (UTC), integrado en el Unicode Consortium, del que forman parte con distinto grado de implicación empresas como: Microsoft, IBM, Oracle, SAP, Google, instituciones como la Universidad de Berkeley, y profesionales y académicos a título individual.

Unicode para cada carácter o símbolo especifica un nombre y un identificador único, numérico entero, llamado el punto de código (code point) además de otras informaciones necesarias para su uso correcto como la direccionalidad, capitalización y otros atributos.

Según la arquitectura de cada ordenador, este podrá utilizará bloques de 8, 16 o 32 bits para ordenadores de 32 bits (ya casi no se fabrican), y 8, 16, 32 y 64 bits para ordenadores de 64 bits (son los pc actuales) para representar dichos números enteros. Las formas de codificación de Unicode reglamentan la forma en que los puntos de código se transformarán en unidades tratables por el computador.

Existen tres normas de codificación bajo el nombre UTF (Unicode Transformation Format - Formato de Transformación Unicode ):

    - UTF-8 Codificación orientada a byte con símbolos de longitud variable. La más utilizada pero la más complicada para el ordenador.
    - UTF-16 Codificación de 16 bits de longitud variable optimizada para la representación del plano básico multilingüe (BMP).

    - UTF-32 Codificación de 32 bits de longitud fija, y la más sencilla de las tres

Norma UTF8mb4
La diferencia entre UTF8 y UTF8mb4 es que el primero solo puede almacenar caracteres de 3 bytes, mientras que el segundo puede almacenar caracteres de 4 bytes. En términos Unicode, UTF8 solo puede almacenar caracteres en el plano multilingüe básico, mientras que UTF8mb4 puede almacenar cualquier carácter Unicode. Esto amplía enormemente la usabilidad del lenguaje. Unicode no está exento de problemas, pero es la mejor opción disponible.

UTF8mb4 es 100% compatible con UTF8. Los caracteres UTF8mb4 son muy útiles porque hoy en día necesitamos soporte para almacenar no solo caracteres de idioma sino también símbolos, emojis, emoticonos, etc.


Sistemas Operativos
Actualmente todos los sistemas operativos Windows, Apple y Linux utilizan el conjunto de caracteres UTF-8 a la hora de almacenar el nombre de archivos y directorios y su contenido en el caso de archivos de texto plano, pero hubo un tiempo en que los sistemas operativos Windows utilizaron el conjunto de caracteres ISO-8859, con la variante específica según el lugar donde se esté utilizando. Estas diferencias hacían que los ficheros creados en un sistema Windows muestren los caracteres de manera diferente en el resto de sistemas operativos.


Bases de datos en MySQL (phpMyAdmin)
Cuando creamos una base de datos debemos de elegir siempre el conjunto de caracteres que se va a utilizar para almacenar la información, pero además es muy importante también elegir el cotejamiento para seleccionar el tipo de ordenación y cómo trabajarán las búsquedas.

El cotejamiento (collation) tiene que ver con el orden que van a tener los caracteres o símbolos dentro de un conjunto de caracteres, y que no tiene que ver con el orden en el que se almacenan dentro del conjunto.

Un sistema de cotejamiento puede ser la ordenación numérica, que fija un orden para los números positivos, negativos, decimales, etc. Otro sistema de cotejamiento puede ser la ordenación alfabética, que fija un orden para las letras del alfabeto. O incluso un sistema de cotejamiento para símbolos como en el caso del lenguaje chino.

El sistema de cotejamiento, a la hora de ordenar palabras, números, etc; indicará si ordenará teniendo en cuenta los caracteres de izquierda a derecha (como en español) o de derecha a izquierda (como en árabe).

Lo normal es que nos encontremos cotejamientos que sean no-sensibles a mayúsculas, minúsculas y acentos (case insensitive - ci) y, por tanto, ordenen al mismo nivel una letra en mayúscula, minúscula y con acento. Aunque también podemos encontrar lo contrario.

Además podemos encontrar que para un mismo conjunto de caracteres existan varios cotejamientos, normalmente según el idioma con el que trabajemos. Por ejemplo: UTF-8 da soporte a casi la totalidad de lenguas del mundo, por lo que existirá un cotejamiento diferente para cada idioma. El carácter Ñ tendrá su sitio solamente en el cotejamiento español (spanish).

En MySQL vienen asociados en cada elección el conjunto con el cotejamiento, por lo que se trata de elegir la adecuada, recordando que la terminación ci significa case insensitive por lo que considerará iguales las letras mayúsculas, minúsculas y con acento.












.

No hay comentarios: