MYSQL数据库导入数据时出现乱码的消除办法,MySQL数据导入还原时乱码难题

先是在新建数据库时必然要小心生成原数据库一样的编码格局,假使已经转移能够用phpmyadmin等工具再整治叁回,幸免数据库编码和表的编码不合併产生乱码。

依靠本人的阅历是mysql导入或导出数据库是时出现乱码一般是文档编码不联合导致的,上面小编来给我们介绍三种减轻乱码的局地解决方法。

mysql字符集乱码难点

MySQL管理连接时,外部连接发送过来的SQL央求会根据以下依次进行转变:

character_set_client //客户连接所运用的字符集
|
character_set_connection //MySQL连接字符集
|
character_set_database //数据库所运用的字符集(表,列)
|
character_set_results //客户机展现所运用的字符集

一. 发生乱码的根本原因在于:

1.客户机未有科学地安装client字符集,导致原来的SQL语句被转产生connection所指字符集,而这种转移,是会遗弃音讯的,要是client是utf8格式,那么一旦调换到gb2312格式,那中间必定会错失新闻,反之则不会扬弃。必须要保险connection的字符集大于client字符集本领保险调换不遗弃消息。

2.
数据库字体未有设置科学,假若数据库字体设置不正确,那么connection字符集调换来database字符集照样遗失编码,原因跟下面一样。

二.怎么set names ‘gb2312’就足以了呢

set names ‘gb2312’也正是那三条语句:

set character_set_client = gb2312;

set character_set_connection = gb2312;

set character_set_results = gb2312;

那般做的话,上述发生乱码的缘故1就空中楼阁了,因为编码格式都统一了,不过那样做并不是万金油。原因有:

1.您的client不肯定是用gb2312编码发送SQL的,假设编码不是gb2312那么转变来gb2312就能够产生难点。

2.您的数据库中的表不鲜明是gb2312格式,要是还是不是gb2312格式而是另外的比方说latin1,那么在蕴藏字符集的时候就能够发生新闻错过。

综上,终极解决方案如下:

1.先是要简明你的客户端时候何种编码格式,这是最重大的(IE6一般用utf8,命令行一般是gbk,一般程序是gb2312)

2.保障您的数据库使用utf8格式,很轻巧,全体编码通吃。

3.早晚要力保connection字符集大于等于client字符集,不然就能够音信错过,例如latin1

若设置set character_set_client =
gb2312,那么至少connection的字符集要压倒等于gb2312,不然就能够丢弃音讯

4.上述三步做准确的话,那么全部中文都被科学地转变来utf8格式存储进了数据库,为了适应不一致的浏览器,区别的客户端,你可以修改character_set_results来以分歧的编码展现中文字体,由于utf8是大方向,因此web应用是本身要么援助于采用utf8格式突显粤语的。

自身明天在mysql上遇见叁个难点,大家的字符集是gb2312.在普通话模糊查找时,会有不相干的结果集.

从难题的根本原因剖析,还应该有下边的主题素材。
例:
汉字“不”的第1、2字节ascii值分别为:178与187
汉字“安”的第1、2字节ascii值分别为:176与178
汉字“花”的第1、2字节ascii值分别为:187与168

精明能干的人一度看出来了:在字符串“安花”中模糊查找字符“不”字时,mysql系统也会认为两岸合营!

并发那个标题标缘故是:MySQL在询问字符串时是高低写不灵动的,在编绎MySQL时相似以ISO-8859字符集作为暗中同意的字符集,由此在可比进程中普通话编码字符大小写转变造成了这种光景。

方法一:
消除措施是对于包括中文的字段加上”binary”属性,使之当作二进制相比较,举个例子将”name
char(10)”改成”name char(10)binary”。

方法二:
倘让你选择源码编写翻译MySQL,能够编写翻译MySQL时使用–with–charset=gbk
参数,那样MySQL就能直接匡助汉语查找和排序了。

方法三:
能够行使 Mysql 的 locate 函数来决断。以上述难点为例,使用方式为:

SELECT * FROM table WHERE locate(field,’李’) > 0;
本站使用的便是这种形式,认为还不易。:P

方法四:
把您的Select语句改成那样,SELECT * FROM TABLE WHERE FIELDS LIKE BINARY
‘%FIND%’即可!

进步的根本,假如想行使“准确”的字符集,照旧先用mysqldump导出成文件,然后导入。

数据库编码格式为utf8,表和字段也都以utf8,存进去的格式是utf-8

可是用命令行工具查询命令select * from 表名; 查询出来的国语是乱码

由来:MySQL客户端根本就无法以utf8的款型重临数据

缓和如下: SET NAMES GB2312; 在命令行实践就能够化解。

关于GBK、GB2312、UTF8

UTF- 8:Unicode Transformation
Format-8bit,允许含BOM,但平时不含BOM。是用于减轻国际上字符的一种多字节编码,它对英文使用8位(即一个字节),普通话使用24为(两个字节)来编码。UTF-8包括满世界享有国家需求动用的字符,是国际编码,通用性强。UTF-8编码的文字能够在各国辅助UTF8字符集的浏览器上海展览中心示。如,要是是UTF8编码,则在西班牙人的阿尔巴尼亚语IE上也能显示中文,他们不须要下载IE的华语语言援救包。

GBK是国标GB2312基础上扩大体积后拾分GB2312的科班。GBK的文字编码是用双字节来代表的,即无论是中、加泰罗尼亚语字符均使用双字节来表示,为了分歧中文,将其最高位都设定成1。GBK包蕴全体中文字符,是国家编码,通用性比UTF8差,但是UTF8占用的数据库比GBK大。

GBK、GB2312等与UTF8之间都必须经过Unicode编码才具相互调换:

GBK、GB2312--Unicode--UTF8

UTF8--Unicode--GBK、GB2312

对于贰个网站、论坛来讲,假使法语字符比较多,则提议使用UTF-8节省空间。然近日后广大论坛的插件一般只协理GBK。

GB2312是GBK的子集,GBK是GB18030的子集

GBK是总结中国和日本韩字符的大字符会集

一旦是普通话的网址 推荐GB2312 GBK不常依然略微难题

为了避免全体乱码难题,应该使用UTF-8,以往要帮助国际化也丰硕低价

UTF-8能够作为是大字符集,它包含了非常多文字的编码。

应用UTF-8的一个功利是其余地点的用户(如东方之珠湖北)无需安装简体汉语援助就能够健康观望你的文字而不会并发乱码。

gb2312是简体粤语的码

gbk帮助简体汉语及繁体普通话

big5协助繁体汉语

utf-8帮助大致具备字符

MySQL中涉及的多少个字符集

character-set-server/default-character-set:服务器字符集,默许情状下所使用的。

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

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

MYSQL数据库导入数据时出现乱码的消除办法,MySQL数据导入还原时乱码难题。先行级依次增添。所以一般情状下只需求安装character-set-server,而在开创数据库和表时不特别钦点字符集,那样统一行使character-set-server字符集。

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

character-set-results:结果字符集。服务器向客户端重临结果只怕音信时,结果以该字符集实行编码。

在客户端,若无定义character-set-results,则运用character-set-client字符集作为暗中认可的字符集。所以只供给设置character-set-client字符集。

要拍卖中文,则能够将character-set-server和character-set-client均设置为GB2312,要是要同有时间管理多国语言,则设置为UTF8。

有关MySQL的华语标题

减轻乱码的主意是,在实践SQL语句以前,将MySQL以下五个连串参数设置为与服务器字符集character-set-server同样的字符集。

character_set_client:客户端的字符集。
character_set_results:结果字符集。
character_set_connection:连接字符集。

安装那四个连串参数通过向MySQL发送语句:set names gb2312

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

证实服务器端设置常常
然后我又用linux远程连接mysql,查询结果普通话乱码
重复翻开编码方式:

mysql> show variables like ‘%character%’;

+————————–+——————————–+
| Variable_name | Value |
+————————–+——————————–+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | utf8 |
| character_set_system | utf8

历次查询前安设查询结果集编码为utf8 即set character_set_results=utf8

赶尽杀绝Mysql导入乱码难点

办法一: 通过扩张参数 –default-character-set = utf8 解决乱码难题

C:\Users\Administrator>mysql -uroot -p yktgl <
F:\YIKATONG\application\gl.sql –default-character-set=utf8

措施二: 在指令行导入乱码消除

1.mysql>use gl;
2.mysql> set names utf8;
3.mysql>source example.sql
mysql -u root -p –default-character-set=utf8
use dbname
source /root/newsdata.sql

办法三: 直接粘贴sql文件里的代码

  1. 开发SQLyog客户端软件;
  2. 定点到SQL编辑器,然后用记事本张开刚刚导出的SQL文件;
  3. 复制文件中全部SQL语句到SQL编辑器当中,实施这么些SQL代码;

二、导出数据
mysqldump -u root -p –default-character-set=utf8 gl> gl.sql

定义编码导入
mysql -u root -p –default-character-set=utf8 -f discuss_chi
如依然乱码使用二进导入

mysql -u root -p –default-character-set=binary -f discuss_chi<=””
p=”” style=”word-wrap: break-word;”>

抑或非常,导出和导入都应用二进方式

导出
mysqldump -u root -p –default-character-set=binary discuss_chi>
dis.sql

导入
mysql -u root -p –default-character-set=binary -f discuss_chi

统一字符集保证不乱码:建议中塞尔维亚(Serbia)语景况选取utf8

1.linux系统言语
/etc/sysconfig/i18n
LANG=”zh_CN.utf8″

2.mysql客户端
临时:
set names utf8;
永久:
计划文件my.cnf
[client]
default-charater-set=utf8

3.mysql服务端
[mysqld]
character-set-server=utf8

4.mysql建库建表语句
点名字符集建库
create database oldboy_utf8 default character set uft8 collate
utf8_general_ci;
内定字符集建表
create table student (
id int(4) not null auto_increment,
name char(20) not null,
primary key(id)
)engine=inonodb auto_increment=10 default charset=utf8

5.支出顺序的字符集

照猫画虎将latin1字符集的数据库修改成GBK字符集的其实进度

1.导出表结构

mysqldump -uroot -p –default-character-set=latin1 -d dbname
>alltatale.sql
–default-character-set=latin1 以latin1连接 -d只导表结构

2.编辑alltable.sql将latin1改成gbk
sed替换

3.有限协理数据库不在更新,导出全数数据
mysqldump -uroot -p –quick –no-create-info –extended-insert
–default-character-set=latin1 dbname >alldata.sql

4.张开alldata.sql将set names latin1修改成set names
gbk;(大概涂改系统的服务端和客户端)

5.建库

create database dbname default charset bgk;

6.创建表,执行alltable.sql

mysql -uroot -p dbname
7.导入数据
mysql -uroot -dbname < alldata.sql

一,一时改换字符集
翻开库表的字符集

show create database 库名\G;
依赖最终的字符集,进行近些日子改换

set names 库表的字符集

二,长久更动字符集
此间说下不乱码的思量:把linux,Mysql客户端,Mysql服务端,库,表,程序的字符集全体统一(建议utf8)

1,改my.cnf

[client]
default-character-set=utf8
[mysqld]
default-character-set=utf8 #切合5.1及在此以前版本
character-set-server=utf8 #适合5.5版本
2,linux字符集修改

vim /etc/sysconfig/i18n
LANG=”zh_CN.UTF-8″
3,库,表

create database test_utf8 DEFAULT CHARACTER SET utf8 COLLATE
utf8_general_ci;

4,应用程序

慎选utf8版本下载

5,查看当前字符集,字符集全体等同修改成功

show variables like ‘character_set%’;

MySQL的字符集帮忙(Character Set Support)有多少个地点:
1、字符集(Character set)
2、排序格局(Collation)。
对此字符集的支撑细化到八个档次:
1、服务器(server)
2、数据库(database)
3、数据表(table)
4、连接(connection)
留心:MySQL对于字符集的钦点能够细化到一个数据库,一张表,一列,应该用怎样字符集。
###################################################################

率先问:mysql暗中同意字符集能无法实行更换呢?
1、修改配置文件:
[mysqld]
default-character-set = utf8
default-collation=utf8_general_ci
#character_set_server = utf8
#[client]
#default-character-set=utf8
修改完后,重启mysql的劳务,service mysql restart
2、命令修改(不推荐,除非有异样意况)
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 ;
不常候设置了表的暗中认可字符集为utf8並且通过UTF-8编码发送查询,存入数据库的还是是乱码。这connection连接层上恐怕出了难点。

缓慢解决方法是在出殡和埋葬查询前实行一下底下那句: SET NAMES
‘utf8’;它一定于上边包车型的士三句发号施令:

SET character_set_client = utf8;
SET character_set_results = utf8;
SET character_set_connection = utf8;

只顾:具体的参数和MySQL的装置形式以及版本有紧凑关系,比较早熟的版本暗中同意字符集是utf-8,当然具体怎么定义,可参考官方文书档案。
###################################################################

第二问:查看MySQL默许字符集(默许景况下,mysql的字符集是latin1)
习感觉常,查看系统的字符集和排序格局的设定能够由此上边包车型客车两条命令:
SHOW VARIABLES LIKE ‘character%’;
SHOW VARIABLES LIKE ‘collation_%’;

###################################################################

其三问:守旧的顺序在制造数据库和多少表时并不曾运用那么复杂的布置,它们用的是私下认可的安顿,那么,暗中同意的布局从何而来呢?
(1)编写翻译MySQL 时,内定了一个MySQL默许的字符集,这么些字符集是 latin1;
(2)安装MySQL 时,能够在配备文件 (my.cnf,可能my.ini)
中钦赐二个默许的的字符集,如若没钦命,那几个值继承自编写翻译时钦赐的;
(3)运维mysqld
时,能够在命令行参数中内定一个暗中同意的的字符集,假使没钦点,那么些值承继自配置文件中的配置,此时
character_set_server 被设定为这些暗中认可的字符集;
(4)当创设三个新的数据库时,除非分明钦命,那些数据库的字符集被缺省设定为character_set_server;
(5)当选定了三个数据库时,character_set_database
被设定为这几个数据库暗中认可的字符集;
(6)在那个数据Curry创制一张表时,表私下认可的字符集被设定为
character_set_database,也正是其一数据库暗许的字符集;
(7)当在表内设置一栏时,除非明确钦定,不然此栏缺省的字符集正是表默许的字符集;
大致的下结论一下,借使什么位置都不改造,那么具备的数据库的全数表的富有栏位的都用
latin1 存款和储蓄,可是我们要是设置
MySQL,一般都会选拔多语言扶助,也正是说,安装程序会自动在配备文件中把
default_character_set 设置为
UTF-8,那保障了缺省情状下,全体的数据库的全数表的具有栏位的都用 UTF-8
存款和储蓄。
###################################################################

第四问:还应该有如何情形下会出于MySQL的缘由形成乱码?
这种情景恐怕和行使高可用软件仍旧插件导致的,比如mysql-proxy等
事例:mysql proxy 乱码难点
一时通过proxy连上数据库之后,查到的字符串始终是乱码,尽管手工业推行了set
names ‘utf8′也未尝遵循。
消除办法,mysql server必须安装
修改my.cnf文件
[mysqld]

skip-character-set-client-handshake
init-connect=’SET NAMES utf8′
default-character-set=utf8
###################################################################

第五问:什么原因还有恐怕会促成乱码难点?
1、浏览器难点
997755.com澳门葡京,2、代理问题
3、代码字符集难点
4、数据库代理字符集难题

MySQL管理连接时,外界连接发送过来的SQL诉求会依据以下依次进行转变:
character_set_client //客户连接所选取的字符集…

办法一: 通过扩张参数 –default-character-set = utf8 消除乱码难题
mysql -u root -p password < path_to_import_file
–default-character-set = utf8

涸泽而渔措施:

方式二: 在命令行导入乱码化解

先是步:还原时创建数据库和表都为utf8格式(建议utf8,当然gbk恐怕gb2312也行)

  1. use database_name;
  2. set names utf8; (或别的急需的编码)
  3. source example.sql (sql文件存放路线)

代码如下:
 
CREATE DATABASE `shegongku` DEFAULT CHARACTER SET utf8
CREATE TABLE `members` (
`uid` mediumint(8) unsigned NOT NULL default ‘0’,
`username` varchar(15) NOT NULL default ”,
`password` varchar(40) NOT NULL default ”,
`salt` varchar(16) default NULL,
`email` varchar(60) NOT NULL default ”
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

措施三: 直接粘贴sql文件里的代码 1. 打开SQLyog客户端软件;

第二部,将sql文件的编码调换下,转成utf8格式,能够notepad2,也得以用UltraEditor进行转移,再在首先行sql文件的拉长一行
set names utf8 保存。

  1. 平素到SQL编辑器,然后用记事本展开刚刚导出的SQL文件;
  2. 复制文件中有所SQL语句到SQL编辑器当中,施行那一个SQL代码;

其三部,导入。一般就不会产出乱码了,那时借使您在
终端cmd下再也查询发掘仍然乱码的话,这么些不是数据库难题,而是突显的难题,在终极里输入
set names gbk,那样汉语就显得符合规律了

方法四:
用记事本或其余文件工具改动SQL文件的编码格式(若方法叁格外,那就尝试方法四)

续上文件

  1. 用记事本(或UE)展开刚才的导出的SQL文件;
  2. 另存此文件——张开另存为对话框,选取对话框中的编码格式为UNICODE编码;
  3. 保留文件,然后CTSportageL+A,全选;
  4. 复制里面包车型大巴SQL语句到SQLyog中的“SQL编码器”个中,再进行三遍SQL语句;
  5. 施行到位后切记刷新贰回,查看中文的数据表,乱码消除,大功告成;

情势一: 通过扩大参数 –default-character-set = utf8 消除乱码难点

mysql -u root -p password < path_to_import_file
–default-character-set = utf8

格局二: 在命令行导入乱码化解

  1. use database_name;
  2. set names utf8; (或别的急需的编码)
  3. source example.sql (sql文件存放路线)

办法三: 直接粘贴sql文件里的代码

  1. 展开SQLyog客户端软件;
  2. 原则性到SQL编辑器,然后用记事本展开刚刚导出的SQL文件;
  3. 复制文件中有着SQL语句到SQL编辑器个中,实施那个SQL代码;

解…

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website