У меня проблема с сохранением эмодзи в базе данных Oracle.Это простая программа на Java, которая берет пользовательский ввод с веб-страницы и сохраняет его в базе данных.
Вот как это выглядит перед сохранением в БД.
Вот как это выглядит при извлечении из базы данных.
Столбец базы данных, определенный как CLOB
так что я ожидаю, что текст с эмодзи будет хорошо сохраняться.
Я также пытался сохранить и получить смайлики с помощью sqlplus, но также мне не повезло:
SQL> update emoji_table set emoji_column = 'Test ?' where emoji_table_id = 123;
1 row updated.
SQL> select emoji_column from emoji_table where emoji_table_id = 123;
EMOJI_TABLE
--------------------------------------------------------------------------------
Test ????
Полагаю, что возможнобыть проблема с кодировкой символов Oracle или что-то в этом роде.Не могли бы вы посоветовать, что может быть не так и где искать возможные исправления.
Спасибо
ОБНОВЛЕНИЕ # 1
По предложению Вернфрида ДомшайтаЯ проверил свой NLS_CHARACTERSET, и он выглядит так: WE8MSWIN1252 .
Поскольку я понимаю, что это является основной причиной проблемы, это не UTF-8, поэтому у него нет зарезервированного спискаemoji.
Вывод
select DUMP(emoji_column, 1016) from emoji_table where emoji_table_id = 123
следующий
ERROR at line 1:
ORA-00932: inconsistent datatypes: expected - got CLOB
Не могли бы вы посоветовать, как обойти?
ОБНОВЛЕНИЕ# 2
Вот вывод SQL-запроса DUMP:
select DUMP(TO_CHAR(emoji_column), 1016) from emoji_table where emoji_table_id = 123
DUMP(TO_CHAR(TEMPLATE),1016)
--------------------------------------------------------------------------------
Typ=1 Len=6 CharacterSet=WE8MSWIN1252: 42,6f,64,79,20,bf
Как я вижу, CharacterSet равен WE8MSWIN1252
, что соответствует NLS_CHARACTERSET
экземпляра Oracle.
Есть ли обходной путь для сохранения смайликов с WE8MSWIN1252
?
Возможно, кодирование Base64
может быть обходным путем, но я хотел бы знать, есть ли лучшее решение.