你把System.out.println(name);
改为:
System.out.println(new String(name.getBytes(), "UTF-8");
再测试下;
改为:
System.out.println(new String(name.getBytes(), "UTF-8");
再测试下;
解决方案 »
- 急!!编写一个图形用户界面的应用程序,如何使运动的图片经鼠标点击后停止,再点击又重新运动?
- JSP不加载数据库驱动怎么也可以连接到数据库啊?
- 10W条记录的效率问题!!!牛人给点意见吧
- 分如果不够再开帖子加
- 为什么下面两句不能同时有效?只会创建其中一个。
- java命令行传参数问题
- 我用jar cvfm Notepad.jar Notepad生成Notepad.jar
- JDBC数据库编程,快来帮忙
- 在浏览器中的Applet的源代码,放在那里了(Windows2000)。急,急急急
- 紧急求助!!JXL往excel模板中写数据,excel模板的数据透视表失效。
- 用文本编辑器编译java源文件,出现这个字符集问题。。。求解。。。。
- HttpURLConnection 中的透明地共享是什么意思,如何理解
你把Connection c = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/com?useUnicode=true&characterEncoding=utf-8", "root", "");
中的characterEncoding=utf-8去掉测试下;
如果还是,那你得确认你保存到数据库的数据是否编码正确了;
我用的客户端 MySQL-Front ,数据就是用MySQL-Front添加的 ,在那里面看不是乱码
项目是纯java项目,不是web,这个也需要还要注意编码吗?
你把Connection c = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/com?useUnicode=true&characterEncoding=utf-8", "root", "");
中的characterEncoding=utf-8去掉测试下;
如果还是,那你得确认你保存到数据库的数据是否编码正确了;去掉了还是乱码
你可以这样测试下;
直接写程序添加一条数据,再读出来是否乱码;同时,你用MySQL-Front 看看添加的数据是否乱码;
结果如下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 */
你可以这样测试下;
直接写程序添加一条数据,再读出来是否乱码;同时,你用MySQL-Front 看看添加的数据是否乱码;用程序的话 ,MySQL-Front 也是乱码,程序再读出来也是乱码
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