你把System.out.println(name); 
改为:
System.out.println(new String(name.getBytes(), "UTF-8");
再测试下; 

解决方案 »

  1.   

    还是几个问号,并且我查看 name.getBytes() 里每个字节的数值都是 63,无论我原来的中文是怎样的,但我有几个中文就有几个问号
      

  2.   

    还是几个问号,并且我查看 name.getBytes() 里每个字节的数值都是 63,无论我原来的中文是怎样的,但我有几个中文就有几个问号
    你把Connection c = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/com?useUnicode=true&characterEncoding=utf-8", "root", ""); 
    中的characterEncoding=utf-8去掉测试下;
    如果还是,那你得确认你保存到数据库的数据是否编码正确了;
      

  3.   


    我用的客户端 MySQL-Front ,数据就是用MySQL-Front添加的 ,在那里面看不是乱码
      

  4.   


    项目是纯java项目,不是web,这个也需要还要注意编码吗?
      

  5.   

    还是几个问号,并且我查看 name.getBytes() 里每个字节的数值都是 63,无论我原来的中文是怎样的,但我有几个中文就有几个问号
    你把Connection c = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/com?useUnicode=true&characterEncoding=utf-8", "root", ""); 
    中的characterEncoding=utf-8去掉测试下;
    如果还是,那你得确认你保存到数据库的数据是否编码正确了;去掉了还是乱码
      

  6.   


    你可以这样测试下;
    直接写程序添加一条数据,再读出来是否乱码;同时,你用MySQL-Front 看看添加的数据是否乱码;
      

  7.   

    show variables like "%char%";
    结果如下character_set_client,gbk
    character_set_connection,gbk
    character_set_database,gbk
    character_set_results,gbk
    character_set_server,gbk
    character_set_system,utf8
    character_sets_dir,D:\develop\mysql\mysql5\share\charsets\
    =====================================================
    show create database com;
    的查询结果:
    com,CREATE DATABASE `com` /*!40100 DEFAULT CHARACTER SET gbk */
      

  8.   

    貌似都是gbk,但是我改成jdbc:mysql://127.0.0.1:3306/com?characterEncoding=gbk还是一样乱码
      

  9.   


    你可以这样测试下;
    直接写程序添加一条数据,再读出来是否乱码;同时,你用MySQL-Front 看看添加的数据是否乱码;用程序的话 ,MySQL-Front 也是乱码,程序再读出来也是乱码
      

  10.   

    重新来一遍  记得插入的时候setnames  gbk
      

  11.   

    用mysql自己的MySQL Workbench看看是不是乱码。
      

  12.   

    Mysql数据库的编码分为四级:
    1
    2
    3
    4
    1、Mysql数据库服务器编码(在相应的配置文件中,需要修改配置文件)
    2、Mysql数据库编码;(可以在创建的时候指定,也可以在创建之后进行修改)
    3、Mysq数据库中表的编码;(可以在创建的时候指定,也可以在创建之后进行修改)
    4、Mysql数据库表中字段的编码;(可以在创建的时候指定,也可以在创建之后进行修改)
    数据库编码选择的一般准则:
    1
    2
    3
    1、GBK/GB2312 适合纯中文存储的数据库
    2、LATIN1 适合于纯英文的存储
    3、UTF8 适合中英文混合编码的存储。
    查看当前数据库、表的编码格式:
    1
    2
    show create database  jio;
    show create table user_Info;
    一、关于数据库的编码操作
    创建数据库database并指定编码和修改数据库编码: (数据库)1
    2
    3
    4
    5
    方法1、
            create database db_name default character set utf8
     
    方法2、
            create database db_name default charset=utf8
    修改DB的编码:  1
    alter database db_name default character set utf8;
    二、关于table的编码操作 
    2.1 、创建表table并指定编码:(表)
    方法1、  1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    create table table_name
         (
     
       > id int(4) not null primary key auto_increment,
     
       > name char(20) not null,
     
       > sex int(4) not null default '0',
     
       > degree double(16,2))default character set utf8;
     
         )default character set utf8;
    方法2、1
    2
    3
    4
    5
    6
    7
    create table table_name
     
       (
     
                 ......//字段信息
     
       )default charset=utf8;
    2.2、 修改表table的编码:
    1
    alter table table_name default character set utf8
    2.3 、指定字段field的编码: (字段)            仅有一种方法
    方法:1
    2
    3
    4
    5
    6
    create   table    table_name
    (
     
              filed_name varchar(20) character set utf8                //注意不能有default
     
    );
    2.4 、修改字段field编码:
    方法:假如字段的限制是   varchar(20)  not null  default '';1
    alter  table table_name change old_filed_name new_filed_name varchar(20) not null default 'abc' character set utf8;
    change和modify的区别,modify只能修改字段属性,change可以修改字段名。三、整体操作
    MySQL的默认编码是Latin1,不支持中文,要支持中午需要把数据库的默认编码修改为gbk或者utf8。3.1、查看数据库的编码方式命令
     >show variables like 'character%';
    +--------------------------+----------------------------+
    | Variable_name | Value |
    +--------------------------+----------------------------+
    | character_set_client | latin1 |
    | character_set_connection | latin1 |
    | character_set_database | latin1 |
    | character_set_filesystem | binary |
    | character_set_results | latin1 |
    | character_set_server | latin1 |
    | character_set_system | utf8 |
    | character_sets_dir | /usr/share/mysql/charsets/ |
    +--------------------------+----------------------------+
    从以上信息可知数据库的编码为latin1,需要修改为gbk或者是utf8;
    其中,
    1
    2
    3
    4
    5
    character_set_client为客户端编码方式;
    character_set_connection为建立连接使用的编码;
    character_set_database数据库的编码;
    character_set_results结果集的编码;
    character_set_server数据库服务器的编码;
    只要保证以上五个采用的编码方式一样,就不会出现乱码问题。
    3.2、linux系统下,修改MySQL数据库默认编码
    停止MySQL的运行   /etc/init.d/mysql start (stop) 为启动和停止服务器。
    MySQL主配置文件为my.cnf,对于/etc/my.cnf文件,需要从mysql/support-files的文件夹cp my-large.cnf一份到/etc/my.cnf。当我们需要修改MySQL数据库的默认编码时,需要编辑my.cnf文件进行编码修改,在linux下修改mysql的配置文件my.cnf,文件位置默认/etc/my.cnf文件
    1
    2
    3
    4
    5
    找到客户端配置[client] 在下面添加
    default-character-set=utf8 默认字符集为utf8
    在找到[mysqld] 添加
    default-character-set=utf8 默认字符集为utf8 (注意5.5.30使用:character-set-server=gbk)
    init_connect='SET NAMES utf8' (设定连接mysql数据库时使用utf8编码,以让mysql数据库为utf8运行)
    修改好后,重新启动mysql 即可,重新查询数据库编码可发现编码方式的改变:
    >show variables like 'character%';
    +--------------------------+----------------------------+
    | Variable_name | Value |
    +--------------------------+----------------------------+
    | character_set_client | utf8 |
    | character_set_connection | utf8 |
    | character_set_database | utf8 |
    | character_set_filesystem | binary |
    | character_set_results | utf8 |
    | character_set_server | utf8 |
    | character_set_system | utf8 |
    | character_sets_dir | /usr/share/mysql/charsets/ |
    +--------------------------+----------------------------+
    3.3 、其它
    mysql set names 问题
    mysql_query("set names 'utf8'");
    一直以来总以为set names 是用来设置msyql 的字符集的,最近作个东西才发现自己认识上的错误,
    查一下手册
    set names ‘x‘语句与这三个语句等价:
    mysql> SET character_set_client = x;
    mysql> SET character_set_results = x;
    mysql> SET character_set_connection = x;set names  应该与前台页面的字符编码一致。mysql -hhostname -Pport -uusername -ppassword -e sql,不用在mysql的提示符下运行mysql,即可以在shell中操作mysql的方法。这个中可以使用这个指定编码,避免乱码:mysql -hhostname -Pport -uusername -ppassword --default-character-set=utf8 -s -e sql