【要统一MySQL数据库客户端 和 服务端的字符集】

如下,就是不统一的情况:

通常,MySQL数据库的下面几个字符集(客户端 和 服务端)统一成一个字符集(即" show variables like 'character_set%'; "结果中的字符集设置尽量一致),才能保证插入的中文数据可以正确输出。(Linux系统的字符集也要尽量和数据库的字符集统一)。

【1.更改客户端的字符集编码】

其中①②④三个参数默认情况采用Linux系统字符集设置,人工登录数据库执行"set names latin1"以及mysql指定字符集登录操作,或者登陆MySQL时输入"  mysql -uroot -p --default-character-set=lantin1 ",这两种都只是临时改变了MySQL客户端的client、connection、results这3个参数的字符集为Latin1,从而解决了插入中文乱码的问题,这个操作也可以通过更改my.cnf配置文件中客户端模块的参数来实现,后者永久生效。

在my.cnf中更改如下所示:

[client]

default-character-set = XXXX

【2.更改服务端的字符集编码】

在my.cnf配置文件中,修改如下所示:

*5.1以及之前版本*

[mysqld]

default-character-set=utf8

*5.5版本*

[mysqld]

character-set-server=utf8

修改完毕之后要重启MySQL才会生效。

【3.Linux系统服务端修改为对应的字符集】

[root@YH~] # cat /etc/sysconfig/i18n

#LANG="zh_CN.GB2312"

LANG="zh_CN.utf8"

[root@YH bbs] # . /etc/sysconfig/i18n

【4.数据库数据表的编码】

除了上述的,还需要查看一下对应的数据库,数据表的字符集编码,要保证这些编码也要一致:

数据表user

数据库test

   注意:对于已有的数据库或者数据表,若想修改字符集不能通过"alter database character set *** "或者" alter table tableName character set *"这两个命令都不能更新已存在的记录的字符集,而只是对新创建的表或者记录有效。

对于已经存在的记录的字符的调整,必须先将数据导出,经过修改字符集后重新导入后才可完成。

修改数据库的默认编码:

alter database dbName character utf8;

下面模拟Linux系统下将Latin1 字符集的数据库修改成 GBK字符集的实际过程:

1.先导出表结构(没有导数据)

mysqldump -uroot -p --default-character-set=latin1 -d dbName>altertable.sql

解释:--default-character-set=latin1 :表示以latin1 字符集进行连接,

   -d:表示只导出表结构

2.编辑altertable.sql,将Latin1改为GBK

3.确保数据不再更新,导出所有的数据

mysqldump -uroot -p --quick --no-create-info  --extended-insert  --default-character-set=latin1 dbName>alldata.sql

参数说明:--quick:用于转存储大的表,强制mysqldump从服务器一次一行的检索数据不是检索所有行,并输出前CACHE到内存中。

           --no-create-info:不创建CREATE TABLE语句

           --extended-insert:使用包括几个VALUES列表的多行INSERT语法,这样文件更小,IO也小,导入数据会非常快。

     --default-character-set=latin1:要按照原来的latin1字符集导出所有数据,这样导出的文件中,所有中文都是可见的,不会保存成乱码。

4.打开alldata.sql,将set names latin1 修改成 set names gbk;(或者修改系统的服务端或者客户端)

5.建库 create database dbNewName default charset gbk;

6.创建表,执行alltable.sql

mysql -uroot -p dbName < altable.sql

7.导入数据

mysql -uroot -p dbName < alldata.sql

---------导出导入小结(以latin1-->utf8为例)--------

  1.建库及建表的结构语句导出,set批量修改为utf8

  2.导出所有的数据

  3.修改mysql服务端和客户端编码为utf8

  4.删除所有的库和数据

  5.导入新的建库及建表语句

  6.导入mysql的所有数据

【5.自己程序代码设置的编码也要一致】

03_MySQL中文乱码处理_02_确保MySQL插入数据不乱码的解决方法的更多相关文章

  1. mysql 主从数据不一致 Slave_SQL_Running: No 解决方法

    在slave服务器上通过如下命令 mysql> show slave status\G; 显示如下情况: Slave_IO_Running: Yes Slave_SQL_Running: No ...

  2. mysql插入数据时,中文乱码

    MySQL 插入数据时,中文乱码问题的解决(转) 当向 MySQL 数据库插入一条带有中文的数据形如 insert into employee values(null,'张三','female','1 ...

  3. (转)MySQL 插入数据时,中文乱码问题的解决

    MySQL 插入数据时,中文乱码问题的解决  原文:http://www.cnblogs.com/sunzn/archive/2013/03/14/2960248.html 当向 MySQL 数据库插 ...

  4. Mysql插入数据里有中文字符出现Incorrect string value的错误

    问题:Mysql插入数据里有中文字符出现Incorrect string value的错误   描述:CMD里直接敲代码插入数据   提示的部分截取为:ERROR 1366 (HY000): Inco ...

  5. 十一、MySQL 插入数据

    MySQL 插入数据 MySQL 表中使用 INSERT INTO SQL语句来插入数据. 你可以通过 mysql> 命令提示窗口中向数据表中插入数据,或者通过PHP脚本来插入数据. 语法 以下 ...

  6. mysql 插入数据失败防止自增长主键增长的方法

    mysql设置了自增长主键ID,插入失败的那个自增长ID也加一的,比如失败5个,下一个成功的不是在原来最后成功数据加1,而是直接变成加6了,失败次数一次就自动增长1了,能不能让失败的不增长的? 或者说 ...

  7. mysql插入数据与删除重复记录的几个例子(收藏)

    mysql插入数据与删除重复记录的几个例子 12-26shell脚本实现mysql数据的批量插入 12-26mysql循环语句插入数据的例子 12-26mysql批量插入数据(insert into ...

  8. shell脚本获取mysql插入数据自增长id的值

    shell脚本获取mysql插入数据自增长id的值 在shell脚本中我们可以通过last_insert_id()获取id值,但是,需要注意的是,该函数必须在执行插入操作的sql语句之后,立即调用,否 ...

  9. MySQL 插入数据

    MySQL 插入数据 MySQL 表中使用 INSERT INTO SQL语句来插入数据. 你可以通过 mysql> 命令提示窗口中向数据表中插入数据,或者通过PHP脚本来插入数据. 语法 以下 ...

随机推荐

  1. Codeforces Round #343 (Div. 2) A. Far Relative’s Birthday Cake

    水题 #include<iostream> #include<string> #include<algorithm> #include<cstdlib> ...

  2. hadoop-1.2.0安装记录

    一.添加用户(各机器均一致)     添加组: sudo addgroup hadoop     添加用户并到组:sudo adduser -ingroup hadoop hadoop 二.ssh无验 ...

  3. HW1.4

    public class Solution { public static void main(String[] args) { System.out.println("a a^2 a^3& ...

  4. windows 7 中将“我的电脑”锁定到任务栏

    1.在桌面右击->新建->快捷方式 2.输入%SystemRoot%\explorer.exe /E,::{20D04FE0-3AEA-1069-A2D8-08002B30309D}点击下 ...

  5. HDU 5464 ( Clarke and problem ) (dp)

    dp[i][j] := 前i个数和为j的情况(mod p) dp[i][j] 分两种情况 1.不选取第i个数 -> dp[i][j] = dp[i-1][j] 2.   选取第i个数 -> ...

  6. C#下的 Emgu CV

    Emgu CV下载地址 http://sourceforge.net/projects/emgucv/files/ 找最新的下就行了,傻瓜式安装,选择目录后自动完成安装,然后提示安装VS2008和VS ...

  7. 第一个java程序

    完成自己的第一个java程序 1.新建一个文本文档,在文本文档中编写自己第一个java程序的代码,代码如下; class hello { public static void main(String[ ...

  8. 《机器学习实战》——K近邻算法

    三要素:距离度量.k值选择.分类决策 原理: (1) 输入点A,输入已知分类的数据集data (2) 求A与数据集中每个点的距离,归一化,并排序,选择距离最近的前K个点 (3) K个点进行投票,票数最 ...

  9. HTML5 Canvas动画效果演示

    HTML5 Canvas动画效果演示 主要思想: 首先要准备一张有连续帧的图片,然后利用HTML5 Canvas的draw方法在不同的时间 间隔绘制不同的帧,这样看起来就像动画在播放. 关键技术点: ...

  10. UVa 497 - Strategic Defense Initiative

    题目:最大上升子序列.输出一组解. 分析:dp,LIS.数据较小 O(n^2)算法就可以. 设以第i个数字作为最大上升子序列中的最后一个数的长度为 f(i),则有转移方程: f(i)= max(f(j ...