03_MySQL中文乱码处理_02_确保MySQL插入数据不乱码的解决方法
【要统一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插入数据不乱码的解决方法的更多相关文章
- mysql 主从数据不一致 Slave_SQL_Running: No 解决方法
在slave服务器上通过如下命令 mysql> show slave status\G; 显示如下情况: Slave_IO_Running: Yes Slave_SQL_Running: No ...
- mysql插入数据时,中文乱码
MySQL 插入数据时,中文乱码问题的解决(转) 当向 MySQL 数据库插入一条带有中文的数据形如 insert into employee values(null,'张三','female','1 ...
- (转)MySQL 插入数据时,中文乱码问题的解决
MySQL 插入数据时,中文乱码问题的解决 原文:http://www.cnblogs.com/sunzn/archive/2013/03/14/2960248.html 当向 MySQL 数据库插 ...
- Mysql插入数据里有中文字符出现Incorrect string value的错误
问题:Mysql插入数据里有中文字符出现Incorrect string value的错误 描述:CMD里直接敲代码插入数据 提示的部分截取为:ERROR 1366 (HY000): Inco ...
- 十一、MySQL 插入数据
MySQL 插入数据 MySQL 表中使用 INSERT INTO SQL语句来插入数据. 你可以通过 mysql> 命令提示窗口中向数据表中插入数据,或者通过PHP脚本来插入数据. 语法 以下 ...
- mysql 插入数据失败防止自增长主键增长的方法
mysql设置了自增长主键ID,插入失败的那个自增长ID也加一的,比如失败5个,下一个成功的不是在原来最后成功数据加1,而是直接变成加6了,失败次数一次就自动增长1了,能不能让失败的不增长的? 或者说 ...
- mysql插入数据与删除重复记录的几个例子(收藏)
mysql插入数据与删除重复记录的几个例子 12-26shell脚本实现mysql数据的批量插入 12-26mysql循环语句插入数据的例子 12-26mysql批量插入数据(insert into ...
- shell脚本获取mysql插入数据自增长id的值
shell脚本获取mysql插入数据自增长id的值 在shell脚本中我们可以通过last_insert_id()获取id值,但是,需要注意的是,该函数必须在执行插入操作的sql语句之后,立即调用,否 ...
- MySQL 插入数据
MySQL 插入数据 MySQL 表中使用 INSERT INTO SQL语句来插入数据. 你可以通过 mysql> 命令提示窗口中向数据表中插入数据,或者通过PHP脚本来插入数据. 语法 以下 ...
随机推荐
- Storm系列(十七)DRPC介绍
Storm版本0.9.5 在storm中DRPC服务应用于远程分布式计算,根据客户端提交的请求参数,而返回Storm计算的结果. DRPC服务启动流程(远程模式) 启动DRPC服务,启动命令:stor ...
- HW5.25
public class Solution { public static void main(String[] args) { System.out.println(convertMillis(55 ...
- Codeforces4D - Mysterious Present(LIS)
题目大意 给你一张宽为w,长为h的的贺卡,然后给你n个信封,每个信封宽为wi,长为hi,问你最多能在贺卡上嵌套多少个信封,如果某个信封i如果能够装在信封j里,当且仅当w[i]<w[j]& ...
- (太强大了) - Linux 性能监控、测试、优化工具
转: http://www.vpsee.com/2014/09/linux-performance-tools/ Linux 平台上的性能工具有很多,眼花缭乱,长期的摸索和经验发现最好用的还是那些久经 ...
- Robotium学习笔记三
以下是从网络上抄录的一些Robotium注意事项 1)有些button没有string,没有text,只能通过index来click这样很不直观,而且button的index并不是固定的,有可能随着控 ...
- 2016-11-15NOIP模拟赛
AM学军OJ T1 暴力 #include<bits/stdc++.h> using namespace std; typedef long long LL; + ; int len, p ...
- [HAOI2012] 容易题
有一个数列A已知对于所有的A[i]都是1~n的自然数,并且知道对于一些A[i]不能取哪些值,我们定义一个数列的积为该数列所有元素的乘积,要求你求出所有可能的数列的积的和 mod 1000000007的 ...
- URL与资源
资源推荐 1.HTTP权威指南. <HTTP权威指南>由古尔利所著,<HTTP权威指南>详细解释了HTTP协议,包括HTTP是如何工作的,如何用HTTP来开发基于Web的应用程 ...
- .NET程序集(Assembly)
在.NET 中,新引入了一个程序集的概念,就是指经由编译器编译得到的,供CLR进一步编译执行的那个中间产物,在WINDOWS系统中,它一般表现为.dll,或者是.exe的格式,但是要注意,它们跟普通意 ...
- jbpm4.4 demo3
package cn.itcast.c_processinstance; import java.util.List; import org.jbpm.api.Configuration; impor ...