2015-07-19 3 views
0

Я работаю с веб-приложением (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

Большое спасибо!

ответ

0

Я пробовал абсолютно все, чтобы сделать эту работу с SJIS, но не удалось, я исправил ситуацию, изменив все таблицы на utf8mb4.

ALTER TABLE xxx CONVERT TO CHARACTER SET utf8mb4; 

и изменения, кодирующие весь путь к UTF-8:

request.setCharacterEncoding("UTF-8"); 
response.setCharacterEncoding("UTF-8"); 

пребывания от SJIS, если это возможно.

Смежные вопросы