我正在使用从 webform 将数据插入 mySQL 数据库的 web-app (JSP),数据作为 UTF8 编码的参数发送到 servlet。应用程序与普通字母和符号完美配合,直到一定程度。但是,如果我尝试插入任何 4 字节字符,它将被问号 (?) 符号替换。
我很确定这个问题与 MySQL 将 UTF8 仅作为 3 个字节的奇怪方式有关,但这次排序规则是 SJIS。
我必须忽略某些东西,所以我将不胜感激任何可用的帮助,为此,我已经为此苦苦挣扎了一天。
至于整理信息,我尝试了多种不同的设置,结果总是一样的,一切正常,除了 4byte 字符。
这是默认排序规则:
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-class编码设置如下
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("SHIFT_JIS");
我知道 DB 可以保存这些字符,因为以前导入的(LODA DATA INFILE)数据具有这些字符,并且它们在 DB 中可见(不是问号)。
所以朋友们,我请你帮忙,这可能很容易(或不可能),如果你需要更多信息,我可以从数据库/源获得。
UTF8 4 字节字符的示例是:(您的浏览器可能看不到)
或:) https://codepoints.net/U+1F4A9
非常感谢!