将 UTF8 数据插入 SJIS 数据库 (MySQL)
Inserting UTF8 data into SJIS DB (MySQL)
我正在使用 web-app (JSP) 将数据从 webform 插入 mySQL 数据库,数据作为以 UTF8 编码的参数发送到 servlet。应用程序在一定程度上与普通字母和符号完美配合。但是,如果我尝试插入任何 4 字节字符,它将被问号 (?) 符号替换。
我很确定问题与 MySQL 将 UTF8 仅作为 3 个字节的奇怪方式有关,但这次排序规则是 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 |
+--------------------------+-------------------+
我也试过以下方法:
+--------------------------+------------------+
| 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 列)的 table 示例:
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 中可见(不是问号)。
所以朋友们,我请求你的帮助,这可能是一件非常容易(或不可能)的事情,如果你需要更多信息,我可以从 DB/source.
获得
UTF8 4 字节字符的示例是:(您的浏览器可能不可见)
或 :) https://codepoints.net/U+1F4A9
非常感谢!
我已经尽一切努力使它与 SJIS 一起工作但没有成功,我通过将所有表更改为 utf8mb4 来解决这个问题。
ALTER TABLE xxx CONVERT TO CHARACTER SET utf8mb4;
并将编码一直更改为 UTF-8:
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
尽可能远离SJIS。
我正在使用 web-app (JSP) 将数据从 webform 插入 mySQL 数据库,数据作为以 UTF8 编码的参数发送到 servlet。应用程序在一定程度上与普通字母和符号完美配合。但是,如果我尝试插入任何 4 字节字符,它将被问号 (?) 符号替换。
我很确定问题与 MySQL 将 UTF8 仅作为 3 个字节的奇怪方式有关,但这次排序规则是 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 |
+--------------------------+-------------------+
我也试过以下方法:
+--------------------------+------------------+
| 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 列)的 table 示例:
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 中可见(不是问号)。
所以朋友们,我请求你的帮助,这可能是一件非常容易(或不可能)的事情,如果你需要更多信息,我可以从 DB/source.
获得UTF8 4 字节字符的示例是:(您的浏览器可能不可见)
或 :) https://codepoints.net/U+1F4A9
非常感谢!
我已经尽一切努力使它与 SJIS 一起工作但没有成功,我通过将所有表更改为 utf8mb4 来解决这个问题。
ALTER TABLE xxx CONVERT TO CHARACTER SET utf8mb4;
并将编码一直更改为 UTF-8:
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
尽可能远离SJIS。