JSP使用UTF-8链接MYSQL数据库(UTF8)乱码以及连接失败问题以及更改mysql默认编码(一)

2015-07-24 09:07:30 · 作者: · 浏览: 1

JSP使用UTF-8链接MYSQL数据库(UTF8)乱码以及连接失败问题:

前言,服了这些大公司,做的数据库都不人性化。。。我忙了很久才搞定的说

csdn好像传不了图片了。。。本来想来几张的,大家将就。。。

1.在windows下mysql的数据库是utf8编码的时候,连接失败(注意mysql中不是UTF-8,而是utf8)

情况,显示?在网页上(网页设置的UTF-8编码)

用户ID号码 用户名称 用户密码 用户地址
47 g? 1243 null
48 ? 1243 null
49 ?123 1243 null
50 ?23 1243 null
51 ?3 1243 null

在数据库设定客户端的语言为GBK可以显示,猜测是内部采用utf8编码,设定之后会自定转换成为GBK编码:

mysql> set names gbk
-> ;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from user;
+--------+-----------+--------------+------------+
| userid | username | userpassword | useradress |
+--------+-----------+--------------+------------+
| 1 | 我 | NULL | NULL |
| 2 | ?2 | 1243 | NULL |
| 3 | ??37fg459 | 1243 | NULL |

当然,用utf8编码的换,一定会乱码的,猜测是windows默认编码是GBK,所以utf是显示不了的。

mysql> set names utf8;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from user;
+--------+-----------+--------------+------------+
| userid | username | userpassword | useradress |
+--------+-----------+--------------+------------+
| 1 | ?? | NULL | NULL |
| 2 | ?2 | 1243 | NULL |
| 3 | ??37fg459 | 1243 | NULL |
| 4 | 澶? | 1243 | NULL |

下面说一下解决的方法:

2.第一步检查数据库的编码方式:

打开数据库的命令行,输入命令 status;

mysql> status;
--------------
D:\mysql_6.0\bin\mysql.exe Ver 14.15 Distrib 6.0.11-alpha, for Win64 (unknown)

Connection id: 72
Current database: contacts
Current user: root@localhost
SSL: Not in use
Using delimiter: ;
Server version: 6.0.11-alpha-community MySQL Community Server (GPL)
Protocol version: 10
Connection: localhost via TCP/IP
Server characterset: utf8
Db characterset: utf8
Client characterset: utf8
Conn. characterset: utf8
TCP port: 3306
Uptime: 9 hours 25 min 53 sec

Threads: 7 Questions: 749 Slow queries: 0 Opens: 23 Flush tables: 1 Open ta
bles: 2 Queries per second avg: 0.22
--------------

还有个命令也可以查看: show variables like "%char%"

mysql> show variables like "%char%";
+--------------------------+------------------------------+
| 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 | D:\mysql_6.0\share\charsets\ |
+--------------------------+------------------------------+
8 rows in set (0.00 sec)

基本上编码做到楼主这个程度,可以确定数据库的默认编码没有问题了。

3.检查数据库的编码,输入命令:

show create database mydata,这里mydata指的是一个数据库的名称。

mysql> show create database mydata;
+----------+--------------------------------------------------------------------
--------------+
| Database | Create Database
|
+----------+--------------------------------------------------------------------
--------------+
| mydata | CREATE DATABASE `mydata` /*!40100 DEFAULT CHARACTER SET utf8 COLLAT
E utf8_bin */ |
+----------+--------------------------------------------------------------------
--------------+
1 row in set (0.00 sec)

4.检查数据库中表和列的编码,在选择一个数据库之后在命令行输入如下命令:

user在这里是一个表名字

show create table user;

mysql> show create table user;
+-------+-----------------------------------------------------------------------
-----------------------------------------------------------------------------
-----------------+
| Table | Create Table

|
+-------+-----------------------------------------------------------------------
---------