mysql中文问题全处理

1、在dos环境下,用mysql --default-character-set=gbk -u root -p 这句话进入mysql~~

2、建数据库、表,如下:

create database admin;

use admin;

CREATE TABLE admin (

admin_name char(20) NOT NULL,

admin_password char(20) NOT NULL

) TYPE=MyISAM,

default character set gbk;

  2, JDBC的设置问题:(这里主要讲的是mysql-connector-java-3.1.8这个JDBC驱动程序而言)

这只是一个压缩包,并不需要安装,只要将其解压,使用的是文件夹mysql-connector-java-3.1.8里的文件:mysql-connector-java-3.1.8-

bin.jar.

需要配置环境变量的是JDBC驱动.在配置前先要把刚才说到的

mysql-connector-java-3.1.8-bin.jar放到本地硬盘某处(我放的地方:E:/JAVA/MySQLJDBC),然后根据你放的地方,配置classpath,我的

配置是这样的:

  .;E:/Java/j2se5.0/lib/tools.jar; E:/Java/j2se5.0/lib/mysql-connector-java-3.1.8-bin-g.jar; E:/JAVA/MySQLJDBC/mysql-

connector-java-3.1.8-bin.jar

  配置这个的目的是让你的java应用程序找到连接mysql的驱动.

  配置完环境变量后还有很重要一步就是为JSP连接数据库配置驱动,这个其实很简单,就是把mysql-connector-java-3.1.8-bin.jar拷到某

些文件夹里就行了,我在网上看了很多资料问了很多人,各种说法都有,我综合了一下,为了保险,我都全做了,呵呵,反正就是拷一个400K

的文件而已,现列出要把mysql-connector-java-3.1.8-bin.jar拷进去的文件夹,如下:E:/Java/Tomcat5.0/common/lib

  E:/Java/Tomcat5.0/shared/lib

一般情况下只要考到Tomcat5.0上面的两个问题夹里面就可以解决问题了,如果需要,也可以将mysql-connector-java-3.1.8-bin.jar这个驱动

文件拷贝到你的WEB站点的 …/WEB-INF/lib 目录下面。

  3, Eclipse中数据库插件中操作数据库时的中文编码问题:

当在Eclipse中装上来你所喜欢的数据库插件的时候,都会出现在你查询某一个数据库之后出现记录中的汉字乱码。解决方法很简单,只要在你

建立数据库连接的时候把URL设置成下面这个样子就可以了:

URL= jdbc:mysql://localhost:3306/?useUnicode=true&characterEncoding=GBK

  4, 在JSP网页编辑中个人经验:在经过很多的次调试之后,发现在装了myeclipse之后,有这么条小巧:

①在用myeclipse编写HTML文件时charset=GBK设置成这个样子,那么在浏览器中浏览时就不会出现乱码; ②而在用myeclipse编辑JSP文件时,

<%@ page contentType="text/html;charset=GB2312" %>设置成这样子,且这条语句必须是整个JSP文件的第一条语句,就可以避免JSP文件在浏

览器中显示时出现乱码;

③对于如果在JSP网页中要从HTML页面中接收数据,那么在JSP中的接收语句的汉字编码应与数据来源的HTML的汉字编码相同;例如②中的HTML

的汉字编码为charset=GBK,那么在JSP中的接收语句就应该这样设置:request.setCharacterEncoding("GBK");如果还要将接受的数据插入到

数据库中(以插入MySQL5.0数据库为例),那么在插入数据库时的汉字编码也应与HTML文件中的汉字编码相同,我的设置如下:con=

DriverManager.getConnection("jdbc:mysql://localhost:3306/sample_db?

user=dazern&password=5201314&useUnicode=true&characterEncoding=GBK")这样设置后数据库中的数据才不会乱码.

以上经验都是在myeclipse3.8.3 Tomcat5.0.28中测试过,没有错误!在此仅供大家借三、数据库存取乱码

当然,在写数据库时,也要保正数据库的编码与其它一致:

我们可以在系统盘windows目录下的my.ini文件,在文件中插入一行default-character-set=GBK,但上面说了这么多,大家也应该明白些了吧,

改动太多的默认设置不是我的风格,因此上,这一行还是不要加的好。

但不管怎么样,我们还是要创建一个基于中文编码的数据库,当然,用客户端登录的时候,某些客户用自动把字体编码转换成中文编码。在这

里,我想说一下在DOS下创建中文编码数据库的方法:

在进入数据库的时候,用mysql --default-character-set=gbk -u root -p 这句话进入mysql,然后创建数据库,如:create database

admin;这样创建起来的数据库就是基于中文编码的了。

用连接数据库的时候,读出的数据也可能是乱码,解决这个问题的方法非常简单,只要在你建立数据库连接的时候把URL设置成下面这个样子就

可以了:URL= jdbc:mysql://localhost:3306/my_database?useUnicode=true&characterEncoding=GBK

好了,说了这么多,总结一句话结束吧,把各种地方的编码统一起来,那么,所在的乱码问题就都解决了!

鉴,具体情况还得具体分析!

文章整理:西部数码--专业提供域名注册、虚拟主机服务
-------------------
mysql中文乱码终结
2008-03-20 13:00
接下来就是创建数据库,名字为sample

然后建立一个table: employee,内容如下(其中应该是email,可是我不小心在建数据库打错了,将错就错了):
+-------------+------------------+------+-----+---------+----------------+
| Field       | Type             | Null | Key | Default | Extra          |
+-------------+------------------+------+-----+---------+----------------+
| employee_id | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| last_name   | varchar(20)      | YES |     | NULL    |                |
| first_name | varchar(20)      | YES |     | NULL    |                |
| birth       | date             | YES |     | NULL    |                |
| sex         | enum('m','f')    | YES |     | m       |                |
| emmail      | varchar(39)      | YES |     | NULL    |                |
+-------------+------------------+------+-----+---------+----------------+

如果只是这样的话,就会出现这样的错误:报告的错误是:sqle=com.mysql.jdbc.MysqlDataTruncation:
Data truncation: Data too long
for column 'last_name' at row 1 从 employee!
有的情况是:| name         |
+-------------+
| ??           |
| 54243654321 |
| ??           |
| ??           |
+-------------+出现问号!

前面我们已经说过了,mysql默认的编码是latin1,不是我们所需要的gbk,所以我们要修改成为utf8,因为若要正确显示中文繁、简、日文、韩

文 使用utf8,修改方法如下:
ALTER DATABASE sample ####这里修改整个数据库的编码
       CHARACTER SET utf8
       DEFAULT CHARACTER SET utf8
       COLLATE utf8_general_ci
       DEFAULT COLLATE utf8_general_ci;
当然了,你也可在在建数据库的时候指定编码,比如:

CREATE DATABASE sample

       CHARACTER SET utf8
       DEFAULT CHARACTER SET utf8
       COLLATE utf8_general_ci
       DEFAULT COLLATE utf8_general_ci ;

接下来要做的是打开mysql所在的目录下的my.nin


在[mysqld]段加入一下代码改成:default-character-set=utf8 启动mysql,输入:执行下列语句,看看结果是不是下面的:mysql> show

variables like '%character%';+--------------------------+-------------------------------------------+| Variable_name         

  | Value                                     |+--------------------------+-------------------------------------------+|

character_set_client     | latin1                                    || character_set_connection | latin1                    

               || character_set_database   | utf8                                      || character_set_results    | latin1  

                                 || character_set_server     | utf8                                                          

              | character_set_system     | utf8                                      || character_sets_dir       |

C:/MySQL/MySQL Server 5.0/share/charsets/ |+--------------------------+-------------------------------------------+mysql>

show variables like '%collation%';+----------------------+-------------------+| Variable_name        | Value             |+-

---------------------+-------------------+| collation_connection | latin1_swedish_ci || collation_database   |

utf8_general_ci   || collation_server     | utf8_general_ci   |+----------------------+-------------------+

接着你再看看执行那个Mysql.html 文件:这回你可以看到的是
mysql> select * from employee;
+-------------+-----------+------------+------------+------+--------------+
| employee_id | last_name | first_name | birth      | sex | emmail       |
+-------------+-----------+------------+------------+------+--------------+
|          12 | ?         | ??         | 1978-12-11 | f    | aaa@asdf.com |
|          13 | ?         | ??         | 1978-12-11 | f    | aaa@asdf.com |
|          14 | ?         | ??         | 1978-12-11 | f    | aaa@asdf.com |
|          15 | ?         | ??         | 1978-12-11 | f    | aaa@asdf.com |
|          16 | ?         | ??         | 1978-12-11 | f    | aaa@asdf.com |
|          17 | ?         | ??         | 1978-12-11 | f    | aaa@asdf.com |
+-------------+-----------+------------+------------+------+--------------+

这当然不是我们希望看到的,我们需要的现实完美正确的中文:
我们还有最后一招:
mysql> SET NAMES 'gbk' ;
Query OK, 0 rows affected (0.00 sec)
因为我们需要的是gbk.
看看mysql中的character设置情况:
mysql> SHOW VARIABLES LIKE '%character%' ;
+--------------------------+-------------------------------------------+
| Variable_name            | Value                                     |
+--------------------------+-------------------------------------------+
| character_set_client     | gbk                                       |
| character_set_connection | gbk                                       |
| character_set_database   | utf8                                      |
| character_set_results    | gbk                                       |
| character_set_server     | utf8                                      |
| character_set_system     | utf8                                      |
| character_sets_dir       | C:/MySQL/MySQL Server 5.0/share/charsets/ |
+--------------------------+-------------------------------------------+
7 rows in set (0.00 sec)

mysql> SHOW VARIABLES LIKE '%collation%' ;
+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | gbk_chinese_ci |
| collation_database   | utf8_general_ci |
| collation_server     | utf8_general_ci |
+----------------------+-----------------+

这个才是我们最终需要的。
在来查看执行完Mysql_jstl.jsp后的数据库中的结果:
mysql> select * from employee;
|          14 | 王        | 彭给       | 1978-12-11 | f    | aaa@asdf.com |
|          15 | 田        | 王光       | 1978-12-11 | f    | aaa@asdf.com |
|          16 | 息        | 存入       | 1978-12-11 | f    | aaa@asdf.com |
|          17 | 往        | 小杯       | 1978-12-11 | f    | aaa@asdf.com |
+-------------+-----------+------------+------------+------+--------------+

可以高兴得看到了中文,并且在浏览器中也显示正确。

但是仅仅这样的话,当你重新启动mysql的时候
所有的设置又失效了。
mysql> show variables like '%character%';
+--------------------------+-------------------------------------------+
| Variable_name            | Value                                     |
+--------------------------+-------------------------------------------+
| character_set_client     | latin1                                    |
| character_set_connection | latin1                                    |
| character_set_database   | utf8                                      |
| character_set_results    | latin1                                    |
| character_set_server     | utf8                                      |
| character_set_system     | utf8                                      |
| character_sets_dir       | C:/MySQL/MySQL Server 5.0/share/charsets/ |
+--------------------------+-------------------------------------------+

mysql> SHOW VARIABLES LIKE '%collation%' ;
+----------------------+-------------------+
| Variable_name        | Value             |
+----------------------+-------------------+
| collation_connection | latin1_swedish_ci |
| collation_database   | utf8_general_ci   |
| collation_server     | utf8_general_ci   |
+----------------------+-------------------+
重新读取又出现乱码:
mysql> select * from employee;
+-------------+-----------+------------+------------+--
| employee_id | last_name | first_name | birth      | s
+-------------+-----------+------------+------------+--
|          12 | ?         | ??         | 1978-12-11 | f
|          13 | ?         | ??         | 1978-12-11 | f
|          14 | ?         | ??         | 1978-12-11 | f
|          15 | ?         | ??         | 1978-12-11 | f
|          16 | ?         | ??         | 1978-12-11 | f
|          17 | ?         | ??         | 1978-12-11 | f
+-------------+-----------+------------+------------+--
所以我们需要在客户端设置系统能识别中文的编码gbk并没有保存到my.ini文件中。所以要修改my.ini文件

在[mysql]段加入一下代码改成:default-character-set=gbk 这样设置就得到保存了。
重启就可以了。
mysql> show variables like '%character%';
+--------------------------+----------------
| Variable_name            | Value+--------------------------
+----------------| character_set_client     | gbk
| character_set_connection | gbk
| character_set_database   | utf8
| character_set_results    | gbk
| character_set_server     | utf8
| character_set_system     | utf8
| character_sets_dir       | C:/MySQL/MySQL
+--------------------------+----------------
mysql> SHOW VARIABLES LIKE '%collation%' ;
+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | gbk_chinese_ci  |
| collation_database   | utf8_general_ci |
| collation_server     | utf8_general_ci |
+----------------------+-----------------+

MySQL的默认编码是Latin1,不支持中文,那么如何修改MySQL的默认编码呢,下面以UTF-8为例来说明

需要注意的是,要修改的地方非常多,相应的修改方法也很多。下面是一种最简单最彻底的方法:

一、Windows
1、中止MySQL服务
2、在MySQL的安装目录下找到my.ini,如果没有就把my-medium.ini复制为一个my.ini即可
3、打开my.ini以后,在[client]和[mysqld]下面均加上default-character-set=utf8,保存并关闭
4、启动MySQL服务

二、Linux
1、中止MySQL服务(bin/mysqladmin -u root shutdown)
2、在/etc/下找到my.cnf,如果没有就把MySQL的安装目录下的support-files目录下的my-medium.cnf复制到/etc/下并改名为my.cnf即可
3、打开my.cnf以后,在[client]和[mysqld]下面均加上default-character-set=utf8,保存并关闭
4、启动MySQL服务(bin/mysqld_safe &)

非常简单,这样的修改一劳永逸,今后MySQL一切相关的默认编码均为UTF-8了,创建新表格的时候无需再次设置

需要注意的是,当前数据库中已经存在的数据仍保留现有的编码方式,因此需要自行转码,方法在网上有很多,不再赘述

原文地址:https://www.cnblogs.com/xyzlmn/p/3168407.html