Utf8mb4 Não está funcionando

Olá grupo!
Quando configuro a conexão para utf8mb4 em uma aplicação de grid dinâmico com insert/update, ainda que o banco de dados mysql esteja com suporte a utf8mb4 o scriptcase insere e lê errado. Ex:
um emoji: :grin: fica �de01
Já mudei o padrão de conexão, o caracter set do banco e tudo mais. Nada funciona. Estou quase cometendo um “crime” e criando uma conexão direta dentro do aplicativo para este caso específico (claro que a manutenção depois vai pro buraco né).
Alguém já passou por um problema assim? Vi que o suporte a utf8mb4 do SC é recente mas este formato é muito importante considerando a proliferação de mensageiros e a necessidade de armazenarmos os emojis enviados pelos clientes.

Alguma sugestão? Parece realmente um bug...
2 Curtidas

Envie para bugs@netmake.com.br , feedback@netmake.com.br e support.php81@scriptcase.com.br

2 Curtidas

Boa tarde a todos do fórum,

provavelmente muitos estão com problema com esta situação do utf8mb4 haja vista que os emojis são amplamente utilizados hoje em dia e praticamente absolutos em mensagens de celular, notificações, etc. Sabemos também que a Netmake não tem um histórico de agilidade e então eu presumo que este bug irá perdurar ainda algum tempo. Isto posto, criei um workaround para meus projetos que vou compartilhar com vocês. Fiz assim:

  1. Crie uma conexão da forma clássica (php) no onload das apps (tentei criar como variável de sessão mas deu alguns problemas, então…). Assim:
    [link] = mysqli_connect($db_server, $db_user, $db_pass);
    mysqli_select_db([link],);
    mysqli_query([link],‘SET NAMES utf8mb4’);
    mysqli_query([link],‘SET character_set_connection=utf8mb4’);
    mysqli_query([link],‘SET character_set_client=utf8mb4’);
    mysqli_query([link],‘SET character_set_results=utf8mb4’);

  2. Esta conexão pode ser tranquilamente referenciada em toda a app… então, para uma query, podemos chamar:
    $result = mysqli_query([link],$sql)

Para um app grid por exemplo, colocamos no “on record” para substituir os registros originais lidos da tabela:
$sql = "select * from whatsAppClassifiersTraining where id = " . {id};
if ($result = mysqli_query([link],$sql)){
if ($result->num_rows > 0){
if ($row = mysqli_fetch_assoc($result)){
{textContent} = $row[“textContent”];
}
}
}

Para gravar novos registros, podemos usar um app controle, usando a mesma técnica em on_validate ou qualquer botão de comando. Infelizmente, para grids editáveis não consegui fazer algo consistente - aparentemente os eventos adicionais on_update, on_refresh, etc… disparam algo adicional que atrapalha a interceptação dos dados fora de formatação.

Basicamente é isso. Espero que a Netmake conserte isso logo mas enquanto isso, taí a solução. Espero ter ajudado alguém.
Abc

2 Curtidas

Olá, só para confirmar, a flag de Conversão do charset para UTF8 pelo banco de dados, em projeto->propriedades, está marcada como “sim”?
Aguardarei seu feedback.

2 Curtidas

image

1 Curtida

Mais uma coisa… tem uma confusão bem grave no código do SC em se tratando de utf8mb4 pois mesmo conectando diretamente o banco os emojis só aparecem na primeira carga (sem AJAX). Qualquer coisa posteriormente carregada com ajax pelo SC (next page em grids, conteúdo resgatado como ajax event, etc)… mostra o código do emoji e não o emoji em si, mesmo tendo sido carregado com a conexão corrigida criada no braço…
TEM DE RESOLVER ISSO URGENTE TIME DO SC. Vai fazer uma BAGUNÇA nos bancos de dados que lidarem com sistemas que receberem dados de dispositivos móveis…

1 Curtida

Olá, @cloudwizards

Qual o tipo de dado utilizado no banco de dados para gravar o emoji? LongBlob?

1 Curtida