Hay dos definiciones en wp-config.php del sitio web de WordPress:
define('DB_CHARSET', 'utf8');
define('DB_COLLATE', '');
Hay varias cosas que son comúnmente mal entendidas. Los nombres
de constantes en esos definidos, podría sugerir que están relacionados con
la base de datos en sí. Ellos no son. Están relacionados con tablas dentro de
la base de datos.
La creación de la base de datos es totalmente independiente de la creación de la tabla.
WordPress no crea una base de datos y no le importa
El conjunto de caracteres y la intercalación predeterminados de la base de datos, siempre que sea posible.
conectarse a la base de datos.
El valor 'utf8' en los primeros medios de definición, el menos restringido
conjunto de caracteres de la familia 'utf8', que es 'utf8' o 'utf8mb4'.
Si deja sin definir las definiciones anteriores, antes de intentar instalar su sitio web, es como decirle a WordPress que tome sus propias decisiones, con respecto al conjunto de caracteres de tablas de la base de datos y la intercalación, que son compatibles con MySQL (dependiendo de la versión de MySQL) y menos limitante.
Las siguientes son las cosas que analiza WordPress para determinar sus opciones durante la instalación:
- versión de MySQL
- recopilación de la base de datos (en wp-config.php)
En función de la versión de MySQL, WordPress decide qué grupo de utf8 utilizar. Hay dos, que se distinguen por sus nombres: utf8 y utf8mb4 . Los juegos de caracteres del grupo utf8 , permiten almacenar un máximo de 3 bytes de caracteres. Los juegos de caracteres del grupo utf8mb4 permiten almacenar un máximo de caracteres de 4 bytes.
Ahora, WordPress verifica el valor de DB_COLLATE definido. Si está vacío, utilizará la intercalación de limitación mínima de la familia utf8 elegida, de lo contrario, utilizará el valor especificado.
Ejemplos
define('DB_CHARSET', 'utf8');
define('DB_COLLATE', '');
Si MySQL no admite utf8mb4 (versiones anteriores), entonces las tablas
el conjunto de caracteres será utf8 y la intercalación será
utf8_general_ci . De lo contrario, podemos esperar utf8mb4 y utf8mb4_unicode_520_ci , o utf8mb4_unicode_ci (depende de la versión de MySQL), respectivamente.
define('DB_CHARSET', 'utf8');
define('DB_COLLATE', 'utf8_polish_ci');
Versión de MySQL más antigua - utf8 y utf8_polish_ci . MySQL mas nuevo
versión - utf8mb4 y utf8mb4_polish_ci ( _polish_ci
se respeta el sufijo)
define('DB_CHARSET', 'cp1250');
define('DB_COLLATE', 'cp1250_polish_ci');
Cualquier versión de MySQL - cp1250 y cp1250_polish_ci .
define('DB_CHARSET', 'cp1250');
define('DB_COLLATE', 'utf8_general_ci');
Cualquier versión de MySQL: error (falta de coincidencia entre el conjunto de caracteres y la intercalación)
Resumen
En la mayoría de los casos, dejar los valores de define, explicados anteriormente, sin cambios, es una buena opción. Pero, si desea que la intercalación de tablas coincida con el idioma de su sitio web, puede modificar el valor de DB_COLLATE definir, adecuadamente (por ejemplo, utf8mb4_polish_ci ).
Nota: eso explica por qué el carácter stored se almacenó y recuperó correctamente. Simplemente, el conjunto de caracteres de tus tablas pertenecía al grupo utf8mb4 , no a utf8 .