微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MySQL数据库乱码 - Linux下乱码问题解决

前言

乱码问题是很让人抓狂的问题,下面我将记录一下Linux下MysqL乱码问题的解决方法
MysqL在linux下乱码问题

一、操作

MysqL认字符集是latin1,但是我们大部分程序使用的字符集是utf8,我们就需要修改MysqL的字符集了。

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/ | 

+--------------------------+----------------------------+ 

MysqL认的编码是latin1

2)查看认排序方式

show variables like 'collation_%';

+----------------------+-----------------+ 
| Variable_name        | Value           | 
+----------------------+-----------------+ 
| collation_connection | latin1_swedish_ci | 
| collation_database   | latin1_swedish_ci | 
| collation_server     | latin1_swedish_ci | 
+----------------------+-----------------+ 

3)修改认字符集

修改文件/etc/my.cnf内容

在[client]下添加如下语句

default-character-set=utf8  

在[MysqLd]下添加

default-character-set=utf8

init_connect='SET NAMES utf8'    ##设定连接MysqL是使用UTF8编码

修改好后,重启MysqL服务即可

4)另外一种修改字符编码方法

登录MysqL后,输入如下内容

MysqL> SET character_set_client = utf8 ; 
MysqL> SET character_set_connection = utf8 ; 
MysqL> SET character_set_database = utf8 ; 
MysqL> SET character_set_results = utf8 ; 
MysqL> SET character_set_server = utf8 ; 


MysqL> SET collation_connection = utf8 ; 
MysqL> SET collation_database = utf8 ; 
MysqL> SET collation_server = utf8 ; 

5)重新查看

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/
| 
+--------------------------+---------------------------------+

show variables like 'collation_%';

+----------------------+-----------------+ 

| Variable_name        | Value           | 

+----------------------+-----------------+ 

| collation_connection | utf8_general_ci | 

| collation_database   | utf8_general_ci | 

| collation_server     | utf8_general_ci | 

+----------------------+-----------------+ 

6)使用JDBC连接MysqL时需要将连接字符串改为如下方式:

jdbc:MysqL://localhost/MysqL?useUnicode=true&characterEncoding=UTF-8

已utf8的方式连接

二、概念

character-set-server/default-character-set:服务器字符集,认情况下所采用的。

character-set-database:数据库字符集。

character-set-table:数据库表字符集。

character-set-client:客户端的字符集。客户端认字符集。当客户端向服务器发送请求时,请求以该字符集进行编码。

character-set-results:结果字符集。服务器向客户端返回结果或者信息时,结果以该字符集进行编码。

统一设置字符集编码使用语句:set names utf8

三、导入导出防止乱码

1、导出数据库使用命令(在cmd下输入)

MysqLdump -u用户名 -p密码 -h服务器地址 数据库名称 --default-character-set=utf8 --hex-blob >导出数据库.sql

--default-character-set=utf8 代表使用urf8编码导出数据

--hex-blob 代表以16进制导出数据库

2、导入数据库使用命令(在cmd下输入)

MysqL -u用户名 -p密码 -h服务器地址 数据库名称 --default-character-set=utf8 --hex-blob <导出数据库.sql

除了使用上面的命令导入数据库外,还可以登录MysqL,使用source命令导入

MysqL> source 导出数据库.sql

注:blob字段存放的是二进制数据,故其没有字符集编码,在window和linux使用以上方式还是会有乱码的问题,故建议将blob类型修改为text类型,才不会出现乱码。blob类型数据往text类型转换,自己写一个简单的代码,从blob读出数据以字符串的形式存到text字段即可。

转自:http://blog.csdn.net/fengshuiyue/article/details/10046317

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐