No se pueden almacenar emojis en la base de datos

LA SITUACIÓN:

Lo siento de antemano si ya se ha hecho esta pregunta, pero las soluciones no me funcionan.

No importa lo que intente, no puedo almacenar emoji en mi base de datos. Se guardan como????.
Los únicos emojis que se guardan correctamente son los que requieren solo 3 bytes, como la cara tímida o el sol.

El utf8mb4 real no funciona.

Ha sido probado tanto en Android como en iOS. Con los mismos resultados.

VERSIONES:

Mysql: 5.5.49
CodeIgniter: 3.0.0

LOS PASOS:

He modificado el conjunto de caracteres de la base de datos y las propiedades de clasificación.

ALTER DATABASE my_database CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci

He modificado el conjunto de caracteres de la tabla y las propiedades de clasificación.

ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci

He configurado cada campo de la tabla, donde sea posible, como Codificación:UTF-8(ut8mb4) y colación:utf8mb4_unicode_ci

He modificado la conexión de la base de datos en la aplicación CodeIgniter.

He ejecutado lo siguiente:SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci

Por último, también he intentado esto:REPAIR TABLE table_name; OPTIMIZE TABLE table_name;

Todo debería haberse configurado correctamente, pero aún así no funciona.

AJUSTES DE BASE DE DATOS:

Este es el resultado ejecutando el siguiente comando:

`SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';`

AJUSTES DE MESA:

Una foto de la estructura de la mesa:

CONEXIÓN DE BASE DE DATOS:

Estas son las configuraciones de conexión de la base de datos dentro de database.php (tenga en cuenta que esta no es la única base de datos, también hay otras que se conectan usando utf8)

$db['my_database'] = array(
        'dsn'           => '',
        'hostname'      => PROJECT_DATABASE_HOSTNAME,
        'username'      => PROJECT_DATABASE_USERNAME,
        'password'      => PROJECT_DATABASE_PASSWORD,
        'database'      => PROJECT_DATABASE_NAME,
        'dbdriver'      => 'mysqli',
        'dbprefix'      => '',
        'pconnect'      => FALSE,
        'db_debug'      => TRUE,
        'cache_on'      => FALSE,
        'cachedir'      => '',
        'char_set'      => 'utf8mb4',
        'dbcollat'      => 'utf8mb4_unicode_ci',
        'swap_pre'      => '',
        'encrypt'       => FALSE,
        'compress'      => FALSE,
        'stricton'      => FALSE,
        'failover'      => array(),
        'save_queries'  => TRUE
    );

MY.CNF SETTINGS:

Este es todo el contenido del archivo my.cnf:

[mysqld]
default-storage-engine=MyISAM
innodb_file_per_table=1
max_allowed_packet=268435456
open_files_limit=10000
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

LA PREGUNTA:

¿Sabes por qué no funciona? ¿Me estoy perdiendo de algo?

HIPOTESIS 1:

No estoy seguro, pero la causa del problema puede ser esta:

Como puedes ver en my.cnfcharacter-set-server está claramente establecido comoutf8mb4:

Pero después de ejecutar la consulta en la base de datos:

SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';

El resultado es quecharacter-set-server = latin1

¿Sabes por qué es eso? ¿Por qué no se está actualizando realmente?

HIPOTESIS 2:

La aplicación utiliza varias bases de datos diferentes. Este está configurado en utf8mb4 pero todos los demás están configurados en utf8. ¿Puede ser un problema incluso si son bases de datos separadas?

¡Gracias!

EDITAR:

Este es el resultado deSHOW CREATE TABLE app_messages;

CREATE TABLE `app_messages` (
  `message_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `project_id` bigint(20) NOT NULL,
  `sender_id` bigint(20) NOT NULL,
  `receiver_id` bigint(20) NOT NULL,
  `message` text COLLATE utf8mb4_unicode_ci,
  `timestamp` bigint(20) DEFAULT NULL,
  `is_read` enum('x','') COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`message_id`)
) ENGINE=InnoDB AUTO_INCREMENT=496 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci

EDITAR 2:

He ejecutado el siguiente comando:

INSERT INTO app_messages (message_id, project_id, sender_id, receiver_id, message, timestamp, is_read)
VALUES ('496','322','77','188', '' ,'1473413606','x');

Y otros dos similares con y

Se insertaron en la tabla sin problemas:

Pero en la aplicación real lo que realmente veo es:? (esta vez solo uno? y no 4)

Respuestas a la pregunta(7)

Su respuesta a la pregunta