O que você tem EXTRATERRESTRIAL ALIEN (U+1F47D)
e o BROKEN HEART (U+1F494)
que não está no plano multilíngue básico. Eles não podem ser representados em java como um char "👽💔".length() == 4
,. Eles definitivamente não são caracteres nulos e você verá quadrados se você não estiver usando fontes que os suportem.
MySQL de utf8
apenas suporta avião multilingual básico, e você precisa usar utf8mb4
em vez :
Para um caractere suplementar, utf8 não pode armazenar o caractere, enquanto utf8mb4 requer quatro bytes para armazená-lo. Como o utf8 não pode armazenar o caractere, você não tem nenhum caractere suplementar nas colunas do utf8 e não precisa se preocupar com a conversão de caracteres ou perda de dados ao atualizar os dados do utf8 de versões anteriores do MySQL.
Portanto, para suportar esses caracteres, seu MySQL precisa ser 5.5+ e você precisa usar em utf8mb4
qualquer lugar. A codificação da conexão precisa ser utf8mb4
, o conjunto de caracteres precisa ser utf8mb4
e a colação precisa ser utf8mb4
. Para java ainda é justo "utf-8"
, mas o MySQL precisa de uma distinção.
Não sei qual driver você está usando, mas uma maneira agnóstica de driver para definir o conjunto de caracteres de conexão é enviar a consulta:
SET NAMES 'utf8mb4'
Logo após fazer a conexão.
Veja também para o Conector / J :
14.14: Como posso usar UTF8 de 4 bytes, utf8mb4 com Conector / J?
Para usar UTF8 de 4 bytes com Conector / J, configure o servidor MySQL com character_set_server = utf8mb4. O conector / J usará essa configuração
, desde que characterEncoding não tenha sido definido na string de conexão . Isso é equivalente à autodetecção do conjunto de caracteres.
Ajuste suas colunas e banco de dados também:
var1 varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL
Novamente, sua versão do MySQL precisa ser relativamente atualizada para suporte utf8mb4.