Java é capaz de armazenar TODOS os textos Unicode válidos. Ele usa UTF-16 internamente.
Se você configurar todo o caminho de dados corretamente, todo o texto será preservado. Você precisa garantir:
- A string correta chega ao Java (no caso de aplicativos da web, codificação de caracteres do formulário que está sendo enviado).
- Java sabe que deve estar se comunicando com o banco de dados em UTF-8 e o banco de dados sabe que deve estar esperando UTF-8 por meio da conexão. Você garante isso ao configurar a conexão com o banco de dados.
- Os dados são armazenados como UTF-8 no banco de dados.
Observe que [a documentação do MySQL] reivindica O UTF-8 é incapaz de armazenar caracteres fora do Plano Multilíngue Básico (todos os caracteres "normais" estão dentro do BMP). O próprio UTF-8 é perfeitamente capaz de armazenar todos os caracteres unicode e o banco de dados também deve ser capaz de codificar esses caracteres.
Java em si é bom - apenas lembre-se de que alguns caracteres unicode raros são na verdade dois caracteres (chamados de par substituto ) em Java.