Я работаю с веб-приложением (JSP), которое вставляет данные в базу данных mySQL из webform, данные отправляются сервлету в качестве параметров, закодированных в UTF8. Приложение отлично работает с обычными буквами и символами до определенной степени. Но если я пытаюсь вставить любой 4-байтовый символ, он будет заменен символом вопросительного знака (?).Вставка данных UTF8 в SJIS DB (MySQL)
Я уверен, что проблема имеет какое-то отношение к MySQL странному способу использования UTF8 только в 3 байтах, но на этот раз сортировка SJIS.
Должно быть, я должен что-то игнорировать, поэтому я был бы признателен за любую доступную помощь, я на мгновение ударился головой о стену.
Что касается информации о сортировке, я пробовал несколько разных настроек, результат всегда один и тот же, все работает отлично, за исключением четырехбайтовых символов.
это сверка по умолчанию:
SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%'
OR Variable_name LIKE 'collation%';
+--------------------------+-------------------+
| Variable_name | Value |
+--------------------------+-------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | sjis |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| collation_connection | utf8_general_ci |
| collation_database | sjis_japanese_ci |
| collation_server | latin1_swedish_ci |
+--------------------------+-------------------+
Я также попытался со следующими:
+--------------------------+------------------+
| Variable_name | Value |
+--------------------------+------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | sjis |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | sjis |
| character_set_system | utf8 |
| collation_connection | utf8_general_ci |
| collation_database | sjis_japanese_ci |
| collation_server | sjis_japanese_ci |
+--------------------------+------------------+
пример таблицы Я вставив в (Z столбец):
show FULL COLUMNS FROM XYZ;
+--------+------------------+------------------+------+-----+---------+----- -----------+---------------------------------+---------+
| Field | Type | Collation | Null | Key | Default | Extra | Privileges | Comment |
+--------+------------------+------------------+------+-----+---------+----- -----------+---------------------------------+---------+
| X | int(10) unsigned | NULL | NO | PRI | NULL | auto_increment | select,insert,update,references | |
| Y | date | NULL | YES | | NULL | | select,insert,update,references | |
| Z | varchar(255) | sjis_japanese_ci | YES | | NULL | | select,insert,update,references | |
+--------+------------------+------------------+------+-----+---------+----------------+---------------------------------+---------+
внутри кодирования JAVA-класса устанавливается следующим образом:
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("SHIFT_JIS");
Я знаю, что DB может содержать эти символы, поскольку ранее импортированные данные (LODA DATA INFILE) имеют эти символы, и они видны в БД (не вопросительные знаки).
так что друзья, я прошу вас об этом, это, вероятно, что-то очень простое (или невозможно), если вам нужна дополнительная информация, я могу получить его из базы данных/источника.
пример UTF8 4 байта характера: (может быть не видно из вашего браузера)
или :) https://codepoints.net/U+1F4A9
Большое спасибо!