首先把你获取的页面的数据用DB的编码方式重新编码一下再存入DB
如String tstna=requestgetParameter("shijuanming");
改成String tstna=requestgetParameter("shijuanming");
tstna = new String(tstnagetBytes("ISO-8859-1", "GB2312"));
后面的一个编码方式,如果DB是GB2312,那就是这个,如果不是,改成DB相应的编码方式就行了
当然,把mysql 和 jsp上编码格式设置一致即可, 一般默认mysql的编码格式是UTF-8, 建议在jsp中也设置为UTF-8, 如果你不想这么做的话要改数据库格式, 也就是说你所有建立的表都要重新建立成GBK编码。
你的mysql客户端和你的mysql服务器的编码不一样,,应为utf8编码的中文是3个字符,而gbk编码的中文是两个字符,,这样解析出来的中文就是乱码了。。你需要该数据库的字符集编码。。。具体如下:
找到mysql
的ini配置文件
在[client]这里加上default_character_set
=
utf8
在[mysqld]这里加上character_set_server
=
utf8
不出意外应该可以了
1用phpmyadmin创建数据库和数据表
创建数据库的时候,请将“整理”设置为:“utf8_general_ci”
或执行语句:
复制代码
代码如下:CREATE
DATABASE
`dbname`
DEFAULT
CHARACTER
SET
utf8
COLLATE
utf8_general_ci;
创建数据表的时候:如果是该字段是存放中文的话,则需要将“整理”设置为:“utf8_general_ci”,
如果该字段是存放英文或数字的话,默认就可以了。
相应的SQL语句,例如:
CREATE
TABLE
`test`
(
`id`
INT
NOT
NULL
,
`name`
VARCHAR(
10
)
CHARACTER
SET
utf8
COLLATE
utf8_general_ci
NOT
NULL
,
PRIMARY
KEY
(
`id`
)
)
ENGINE
=
MYISAM
;
2用PHP读写数据库
在连接数据库之后:
复制代码
代码如下:$connection
=
mysql_connect($host_name,
$host_user,
$host_pass);
加入两行:
mysql_query("set
character
set
'utf8'");//读库
mysql_query("set
names
'utf8'");//写库
就可以正常的读写MYSQL数据库了。
用的appserv-win32-2510做的环境,装这个包的时候用默认的utf8编码。
在写数据库连接文件时,写成:
$conn
=
mysql_connect("$host","$user","$password");
mysql_query("SET
NAMES
'UTF8'");
mysql_select_db("$database",$conn);
然后在做页面时,注意这句:
复制代码
代码如下:<meta
>
首先,这个问题一般都是字符集不匹配的问题;就是说数据库中存储数据用的字符集,和你连接数据库用的字符集不匹配。
然后,就是看你的数据库了
oracle的话
先确认数据库服务所采用的字符集,select userenv('language') from dual;
然后修改客户端的环境变量,比如set nls_lang=AMERICAN_AMERICAZHS16GBK
mysql的话,一般都是用utf8的字符集
在你客户端连接时,也要保证字符集一致才行
其它类型数据库的话,看具体的解决方案
可能原因一:数据库不支持中文,或者是数据库编码格式和java代码编码格式不一致,这种情况需要修改数据库编码格式:
ALTER SYSTEM DISABLE RESTRICTED SESSION;改完编码后执行sql> conn / as sysdba;
sql> shutdown immediate;
database closed
database dismounted
oracle instance shut down
sql> startup mount;
oracle instance started
total system global area 135337420 bytes
fixed size 452044 bytes
variable size 109051904 bytes
database buffers 25165824 bytes
redo buffers 667648 bytes
database mounted
sql> alter system enable restricted session;
system altered
sql> alter system set job_queue_processes=0;
system altered
sql> alter system set aq_tm_processes=0;
system altered
sql> alter database open;
database altered
sql> alter database character set internal_use UTF-8;
sql> shutdown immediate;
sql> startup;
可能原因二:java代码生成插入语句的时候,已经发生乱码现象,这种只能是修改项目编码格式或者是在数据获取的时候直接转译代码编码格式来实现了。
如果你只是为了检测查询结果乱码的问题的话,建议你先将代码修改成如下:
ClassforName("commysqljdbcDriver")newInstance();
String url = "jdbc:mysql://localhost:3306/b2buseUnicode=true&characterEncoding=UTF-8";
Connection con = DriverManagergetConnection(url, "root", "root");
//这是运行代码
//Connection con = SQLDBDB();
Statement st = concreateStatement();
//ResultSet rs = stexecuteQuery("select userid,username,company,avatar from b2b_member //where company like '%北京%'");
ResultSet rs = stexecuteQuery("select from b2b_member limit 0,10");
while (rsnext()) {
Systemoutprintln(rsgetInt("userid") + " : " + rsgetString("username"));
}
这样首先确保能从数据库中查询到结果,然后看包含有中文的记录是否乱码。
如果确实是中文乱码了,那么你应该看数据库表中对应记录的汉字内容是否在存储的时候就已经乱码了,如果数据库中的内容正常,而查询出来的结果乱码的话,基本上可以肯定数据库存储字段的数据格式跟你url的“utf8”格式拼配不上造成的;
如果这样检查了,数据库字段的存储格式也是"utf8",那么很有可能就是项目的编码格式不是造成java文件编译时,sql语句中的中文发生了乱码,比如myeclipse的默认编码格式就是"GBK";
以上就是关于JSP页面数据库中的中文出现乱码是怎么回事全部的内容,包括:JSP页面数据库中的中文出现乱码是怎么回事、为什么中文存入数据库中会乱码、MYSQL数据库使用UTF-8中文编码乱码的解决办法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)