2015-07-19 87 views
0

我正在使用从webform向mySQL数据库插入数据的web-app(JSP),数据以UTF8编码的参数发送到servlet。在一定程度上,应用程序与普通字母和符号完美结合。但如果我试图插入任何4字节字符,它将被问号(?)符号替换。将UTF8数据插入SJIS DB(MySQL)

我敢肯定这个问题有事情做与具有UTF8,因为只有3个字节的MySQL的奇怪的方式,但这次整理是SJIS。

我必须俯视一些东西,所以我会很感激任何帮助,我一直在为这一天将我的头撞到墙上。

为整理信息,我已经尝试了多种不同的设置,结果都是一样的,一切工作正常,除了4个字节的字符。

这是默认归类:

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 | 
+--------------------------+-------------------+ 

我还试图与以下:

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 |   | 
+--------+------------------+------------------+------+-----+---------+----------------+---------------------------------+---------+ 
:表我插入(Z列)

+--------------------------+------------------+ 
| 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 | 
+--------------------------+------------------+ 

示例内部JAVA级编码

设置如下

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

我知道作为以前进口的(LODA DATA INFILE)数据有这些字符,他们是可见的DB(未问号)DB可以保存这个字符。

左右的朋友,我问这个你的帮助,这可能是一件很容易的(或不可能的),如果你需要更多信息,我可以从DB /源得到它。 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如果可能的话。