Não é possível armazenar emoji no banco de dados

A SITUAÇÃO:

Desculpe antecipadamente se esta pergunta já foi feita, mas as soluções não estão funcionando para mim.

Não importa o que eu tente, não consigo armazenar emoticons no meu banco de dados. Eles são salvos como????.
Os únicos emojis salvos corretamente são aqueles que requerem apenas 3 bytes, como o rosto tímido ou o sol.

O utf8mb4 real não está funcionando.

Foi testado no Android e Ios. Com os mesmos resultados.

VERSÕES:

Mysql: 5.5.49
CodeIgniter: 3.0.0

OS PASSOS:

Modifiquei o conjunto de caracteres do banco de dados e as propriedades de agrupamento.

ALTER DATABASE my_database CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci

Eu modifiquei o conjunto de caracteres da tabela e as propriedades de agrupamento.

ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci

Eu configurei cada campo da tabela, sempre que possível, como Codificação:UTF-8(ut8mb4) e agrupamento:utf8mb4_unicode_ci

Modifiquei a conexão com o banco de dados no aplicativo CodeIgniter.

Eu executei o seguinte:SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci

Por fim, eu também tentei isso:REPAIR TABLE table_name; OPTIMIZE TABLE table_name;

Tudo deveria ter sido configurado corretamente, mas ainda assim não funciona.

CONFIGURAÇÕES DA BASE DE DADOS:

Este é o resultado executando o seguinte comando:

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

CONFIGURAÇÕES DA TABELA:

Uma observação da estrutura da tabela:

CONEXÃO DA BASE DE DADOS:

Essas são as configurações de conexão com o banco de dados no database.php (observe que este não é o único banco de dados, também existem outros que se conectam 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
    );

CONFIGURAÇÕES MY.CNF:

Este é todo o conteúdo do arquivo 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

A QUESTÃO:

Você sabe por que não está funcionando? Estou esquecendo de algo?

HIPÓTESE 1:

Não tenho certeza, mas a causa do problema pode ser esta:

Como você pode ver no my.cnfcharacter-set-server está claramente definido comoutf8mb4:

Mas depois de executar a consulta no banco de dados:

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

O resultado é quecharacter-set-server = latin1

Você sabe por que isso? Por que não está realmente atualizando?

HIPÓTESE 2:

O aplicativo usa vários bancos de dados diferentes. Este está definido como utf8mb4, mas todos os outros estão definidos como utf8. Pode ser um problema, mesmo que sejam bancos de dados separados?

Obrigado!

EDITAR:

Este é o 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

EDIT 2:

Eu executei o seguinte comando:

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

E outros dois semelhantes com e

Eles foram inseridos na tabela sem problemas:

Mas no aplicativo real o que realmente vejo é:? (desta vez, apenas um? e não 4)

questionAnswers(7)

yourAnswerToTheQuestion