Невозможно получить правильное значение для запроса китайского значения из поля latin1 (varchar или char), используя JDBC для MySQL. Персонаж не может быть изменен. Ниже приведены шаги теста. Можно ли получить правильное значение для этой ситуации? Что еще мне делать?
1. создать базу данных:
CREATE DATABASE TESTDB CHARACTER SET latin1 COLLATE latin1_general_ci;
2. создать таблицу:
CREATE TABLE TB1 (
vname varchar(50) default '',
cname char(50) default ''
) DEFAULT CHARSET=latin1 ;
3. вставить данные:
set names latin1;
insert into TB1(vname,cname) values('名字v','名字c');
4. показать набор символов:
mysql> show variables like '%set%';
+--------------------------+---------------------------------------------------------+
| Variable_name | Value |
+--------------------------+---------------------------------------------------------+
| auto_increment_offset | 1 |
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | F:\Program Files\MySQL\MySQL Server 5.5\share\charsets\ |
+--------------------------+---------------------------------------------------------+
5. он может получить правильное значение при запросе из командной консоли:
mysql> select * from tb1;
+-------+-------+
| vname | cname |
+-------+-------+
| 名字v | 名字c |
+-------+-------+
1 row in set (0.00 sec)
6. невозможно получить правильную оценку при использовании JDBC для запроса:
URL-адрес JDBC: JDBC: MySQL: //192.168.5.74/testdb? characterEncoding = UTF-8
*set names utf8;
select vname,hex(vname),length(vname),char_length(vname) from tb1;
select cname,hex(cname),length(cname),char_length(cname) from tb1;
select vname,cname
,CONVERT(CONVERT(CONVERT(vname USING latin1) USING binary) USING utf8) as c1
,CONVERT(CONVERT(CONVERT(cname USING latin1) USING binary) USING utf8) as c2
from tb1;*
vname hex(vname) length(vname) char_length(vname)
--------------- -------------- ------------- ------------------
??×?v C3FBD7D676 5 5
cname hex(cname) length(cname) char_length(cname)
--------------- -------------- ------------- ------------------
??×?c C3FBD7D663 5 5
vname cname c1 c2
----------------- --------- ------- ------
??×?v ??×?c