It can't get correct value to query Chinese value from latin1 field (varchar or char) Using JDBC for MySQL. The character can't be changed. The following is the test steps. Is it possible to get the correct value for this situation? What's more should I do?
1. create database:
CREATE DATABASE TESTDB CHARACTER SET latin1 COLLATE latin1_general_ci;
2. create table:
CREATE TABLE TB1 (
vname varchar(50) default '',
cname char(50) default ''
) DEFAULT CHARSET=latin1 ;
3. insert data:
set names latin1;
insert into TB1(vname,cname) values('名字v','名字c');
4. show character set:
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. it can get correct value when querying from command console:
mysql> select * from tb1;
+-------+-------+
| vname | cname |
+-------+-------+
| 名字v | 名字c |
+-------+-------+
1 row in set (0.00 sec)
6. can't get the correct valuing when using JDBC to query:
jdbc url : 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