数据字符集修改步骤:

对于已有的数据库想修改字符集不能直接通过 "alter database character set *"或 "alter table tablename character set *",这两个命令都没有更新已有记录的字符集,而只是对新创建的表或者记录生效。 已经有记录的字符集的调整,必须先将数据导出,经过修改字符集后重新导入后才可完成。 修改数据库默认编码: alter database [your db name] charset [your character setting]

下面模拟将latin1字符集的数据修改成GBK字符集的实际过程。

1、导出表结构 [root@master ~]# /opt/mysql/bin/mysqldump --default-character-set=latin1  -uroot -p -d dbname > alltable.sql

2、编辑alltable.sql将latin1改成GBK

3、确保数据库不再更新,导出所有数据 [root@master ~]# /opt/mysql/bin/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:按照原有字符集导出数据,这样导出的文件中,所有中文都是可见的,不会保存成乱码。

4、打开alldata.sql将set names latin1修改成set names gbk;

5、删库和建库: create database dbname default charset gbk;

6、创建表,执行alltable.sql mysql -uroot -p dbname < alltable.sql

7、导入数据 mysql -uroot -p dbname < alldata.sql 注意:选择目标字符集时,要注意最好大于等于源字符集(字库更大),否则,可能会丢失不被支持的数据。

具体操作如下:

  1. 更改前的数据:
  2. [root@master mysql]# mysql -uroot -p123456 -e "show create database oldboy\G;show create table oldboy.student\G;set names latin1;select * from oldboy.student;\G"
  3. Warning: Using a password on the command line interface can be insecure.
  4. *************************** 1. row ***************************
  5. Database: oldboy
  6. Create Database: CREATE DATABASE `oldboy` /*!40100 DEFAULT CHARACTER SET latin1 */
  7. *************************** 1. row ***************************
  8. Table: student
  9. Create Table: CREATE TABLE `student` (
  10. `id` int(4) NOT NULL AUTO_INCREMENT,
  11. `name` char(20) NOT NULL,
  12. PRIMARY KEY (`id`)
  13. ) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=latin1
  14. +----+-----------+
  15. | id | name |
  16. +----+-----------+
  17. | 1 | oldboy |
  18. | 2 | oldgirl |
  19. | 3 | inca |
  20. | 4 | zuma |
  21. | 5 | kaka |
  22. | 6 | ??? |
  23. | 7 | 老男孩 |
  24. +----+-----------+
  25. 导出表结构:
  26. [root@master mysql]# /opt/mysql/bin/mysqldump --default-character-set=latin1 -uroot -p -d oldboy > zhulh/alltable.sql
  27. 查看导出内容:
  28. [root@master mysql]# grep -E -v "#|\/|^$|--" zhulh/alltable.sql
  29. DROP TABLE IF EXISTS `error_log`;
  30. CREATE TABLE `error_log` (
  31. `error_message` char(80) DEFAULT NULL
  32. ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
  33. DROP TABLE IF EXISTS `student`;
  34. CREATE TABLE `student` (
  35. `id` int(4) NOT NULL AUTO_INCREMENT,
  36. `name` char(20) NOT NULL,
  37. PRIMARY KEY (`id`)
  38. ) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=latin1;
  39. DROP TABLE IF EXISTS `t2`;
  40. CREATE TABLE `t2` (
  41. `s1` int(11) NOT NULL,
  42. PRIMARY KEY (`s1`)
  43. ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
  44. DROP TABLE IF EXISTS `t3`;
  45. CREATE TABLE `t3` (
  46. `s1` int(11) DEFAULT NULL,
  47. KEY `s1` (`s1`),
  48. CONSTRAINT `t3_ibfk_1` FOREIGN KEY (`s1`) REFERENCES `t2` (`s1`)
  49. ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
  50. 修改latin1utf8
  51. [root@master mysql]# sed -i "s/latin1/utf8/" zhulh/alltable.sql
  52. [root@master mysql]# grep -E -v "#|\/|^$|--" zhulh/alltable.sql
  53. DROP TABLE IF EXISTS `error_log`;
  54. CREATE TABLE `error_log` (
  55. `error_message` char(80) DEFAULT NULL
  56. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  57. DROP TABLE IF EXISTS `student`;
  58. CREATE TABLE `student` (
  59. `id` int(4) NOT NULL AUTO_INCREMENT,
  60. `name` char(20) NOT NULL,
  61. PRIMARY KEY (`id`)
  62. ) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;
  63. DROP TABLE IF EXISTS `t2`;
  64. CREATE TABLE `t2` (
  65. `s1` int(11) NOT NULL,
  66. PRIMARY KEY (`s1`)
  67. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  68. DROP TABLE IF EXISTS `t3`;
  69. CREATE TABLE `t3` (
  70. `s1` int(11) DEFAULT NULL,
  71. KEY `s1` (`s1`),
  72. CONSTRAINT `t3_ibfk_1` FOREIGN KEY (`s1`) REFERENCES `t2` (`s1`)
  73. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  74. 确保数据库不再更新,导出所有数据
  75. [root@master mysql]# /opt/mysql/bin/mysqldump --default-character-set=latin1 --quick --no-create-info --extended-insert -uroot -p -B oldboy > zhulh/alldata.sql
  76. 修改latin1utf8:(将SET NAMES latin1 修改成SET NAMES utf8)
  77. [root@master mysql]# sed -i "s/latin1/utf8/" zhulh/alldata.sql
  78. 删除老库:
  79. root@mysql5.6 01:09:24->drop database oldboy;
  80. Query OK, 4 rows affected (0.20 sec)
  81. 新建新库:
  82. root@mysql5.6 01:12:53->create database oldboy default charset utf8;
  83. Query OK, 1 row affected (0.00 sec)
  84. 导入数据:
  85. [root@master mysql]# mysql -uroot -p123456 oldboy < zhulh/alltable.sql
  86. Warning: Using a password on the command line interface can be insecure.
  87. [root@master mysql]# mysql -uroot -p123456 oldboy < zhulh/alldata.sql
  88. Warning: Using a password on the command line interface can be insecure.
  89. [root@master mysql]# mysql -uroot -p123456 -e "select * from oldboy.student;"
  90. Warning: Using a password on the command line interface can be insecure.
  91. +----+-----------+
  92. | id | name |
  93. +----+-----------+
  94. | 1 | oldboy |
  95. | 2 | oldgirl |
  96. | 3 | inca |
  97. | 4 | zuma |
  98. | 5 | kaka |
  99. | 6 | ??? |
  100. | 7 | 老男孩 |
  101. +----+-----------+
  102. [root@master mysql]#

MySQL之对数据库库表的字符集的更改的更多相关文章

  1. MySQL导入导出数据和表结构 source和mysqldump

    MySQL导入数据的方式: 1.使用source /dir/test.sql导入数据进入数据库:查询数据库编码格式show variables like "%char%";设置编码 ...

  2. MySQL 已有大数据量表进行分区踩坑

    一.背景mysql 表中已有 4 亿数据,为提高查询效率,需创建分区,一开始计划是创建 HASH 分区,结果报错:ERROR 1659 (HY000): Field 'partno' is of a ...

  3. 一次MySQL两千万数据大表的优化过程,三种解决方案

    问题概述 使用阿里云rds for MySQL数据库(就是MySQL5.6版本),有个用户上网记录表6个月的数据量近2000万,保留最近一年的数据量达到4000万,查询速度极慢,日常卡死.严重影响业务 ...

  4. mysql -- 循环插入数据到表中

    备忘: 1.经搜索发现,MySql不支持直接写SQL语句实现循环插入功能. 想要实现该功能,可以用其他语言操控MySql来实现,或者用存储过程来实现(Store Procedure--SP).   2 ...

  5. mysql导出数据库数据及表结构

    1,导出远程数据库数据到本地 mysql -A wj_sms -h192.168.1.105 -uroot -p4321 -ss -e "set NAMES 'utf8';SELECT * ...

  6. mysql存储过程(查询数据库内表 游标循环 if判断 插入别的表内)

    BEGIN declare f_age int;DECLARE incode1 VARCHAR(100);DECLARE incode2 VARCHAR(100);DECLARE incode3 VA ...

  7. EXCEL 2010学习笔记 —— 数据透视表

    今天整理一下EXCEL2010 数据透视表的课程笔记,数据透视表可以对多组数据进行统计和整理,是一种基本的数据可视化工具. 记录6个方面的总结: 1.创建数据透视表 2.更改数据透视表的汇总方式 3. ...

  8. mysql更改已有数据表的字符集,保留原有数据内容

    mysql更改已有数据表的字符集,保留原有数据内容     原文网址:http://blog.csdn.net/learn_2/article/details/6460370 环境:在应用开始阶段没有 ...

  9. MySQL数据库、数据表和字段字符集查询、修改和配置

    一.设置编码 LINUX  修改vi/etc/my.cnf WINDOWS my.ini 在[client]下添加    default-character-set=utf8 在[mysqld]下添加 ...

随机推荐

  1. UIlabel多行文字自动换行 (自动折行)

    UIView *footerView = [[UIView alloc]initWithFrame:CGRectMake(, , , )]; UILabel *label = [[UILabel al ...

  2. iOS - (两个APP之间的跳转)

    一个程序若要跳到另一个程序.需要在目标程序的plist文件里面修改: 打开info.plist,添加一项URL types 展开URL types,再展开Item0,将Item0下的URL ident ...

  3. NABCD模式

    各位用户:       我们的“昵妆”是为了帮助不会化妆的用户解决困难, 他们需要有适合他们的优质的化妆品和 正确的视频或者化妆师来指导他们,但是现有的方案并没有很好地解决这些需求,我们有独特的办法, ...

  4. Ways to access Oracle Database in PostgreSQL

    Today, organizations stores information(data) in different database systems. Each database system ha ...

  5. curl命令使用(转)

    转自:http://www.cnblogs.com/sunada2005/p/3829772.html curl命令可以用来构造http请求.参数有很多,常用的参数如下: 通用语法:curl [opt ...

  6. [Reprint]C++函数前和函数后加const修饰符区别

    c++中关于const的用法有很多,const既可以修饰变量,也可以函数,不同的环境下,是有不同的含义.今天来讲讲const加在函数前和函数后面的区别.比如: 01 #include<iostr ...

  7. Web TreeView 加载级联数据

    protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { dt = BLL.GetTable(); LoadL ...

  8. Eclipse下Ruby的配置]

      简述: 在Eclipse中开发Ruby开发环境   步骤: 第一步, 1. 在Eclipse的Help ->  Install New Software输入 http://download. ...

  9. GC是什么? 为什么要有GC?

    GC是什么? 为什么要有GC?  GC是垃圾收集器.  程序员不用担心内存管理,因为垃圾收集器会自动进行管理.要请求垃圾收集,可以调用下面的方法之一:  System.gc() Runtime.get ...

  10. JSP动作跳转页面的时候与根目录的问题

    在JSP动作:<jsp:forward page="....">中,这个page属性所指定的页面要包含根目录的话,必须要用"/",不能够用" ...