MySQL之对数据库库表的字符集的更改

摘要:
导出数据并重新导入修改后的字符集后,必须完成记录字符集的调整。修改数据库默认代码:alterdatabase[yourdbname]char set[yourcharactersetting]将latin1字符集的数据修改为GBK字符集的实际过程如下所示。

数据字符集修改步骤:

对于已有的数据库想修改字符集不能直接通过 "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 注意:选择目标字符集时,要注意最好大于等于源字符集(字库更大),否则,可能会丢失不被支持的数据。

具体操作如下:

更改前的数据:
[root@master mysql]# mysql -uroot -p123456 -e "show create database oldboyG;show create table oldboy.studentG;set names latin1;select * from oldboy.student;G"
Warning: Using a password on the command line interface can be insecure.
*************************** 1. row ***************************
       Database: oldboy
Create Database: CREATE DATABASE `oldboy` /*!40100 DEFAULT CHARACTER SET latin1 */
*************************** 1. row ***************************
       Table: student
Create Table: CREATE TABLE `student` (
  `id` int(4) NOT NULL AUTO_INCREMENT,
  `name` char(20) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=latin1
+----+-----------+
| id | name      |
+----+-----------+
|  1 | oldboy    |
|  2 | oldgirl   |
|  3 | inca      |
|  4 | zuma      |
|  5 | kaka      |
|  6 | ???       |
|  7 | 老男孩    |
+----+-----------+
导出表结构:
[root@master mysql]# /opt/mysql/bin/mysqldump --default-character-set=latin1 -uroot -p -d oldboy > zhulh/alltable.sql
查看导出内容:
[root@master mysql]# grep -E -v "#|/|^$|--" zhulh/alltable.sql
DROP TABLE IF EXISTS `error_log`;
CREATE TABLE `error_log` (
  `error_message` char(80) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
  `id` int(4) NOT NULL AUTO_INCREMENT,
  `name` char(20) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=latin1;
DROP TABLE IF EXISTS `t2`;
CREATE TABLE `t2` (
  `s1` int(11) NOT NULL,
  PRIMARY KEY (`s1`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
DROP TABLE IF EXISTS `t3`;
CREATE TABLE `t3` (
  `s1` int(11) DEFAULT NULL,
  KEY `s1` (`s1`),
  CONSTRAINT `t3_ibfk_1` FOREIGN KEY (`s1`) REFERENCES `t2` (`s1`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
修改latin1为utf8:
[root@master mysql]# sed -i "s/latin1/utf8/" zhulh/alltable.sql
[root@master mysql]# grep -E -v "#|/|^$|--" zhulh/alltable.sql
DROP TABLE IF EXISTS `error_log`;
CREATE TABLE `error_log` (
  `error_message` char(80) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
  `id` int(4) NOT NULL AUTO_INCREMENT,
  `name` char(20) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS `t2`;
CREATE TABLE `t2` (
  `s1` int(11) NOT NULL,
  PRIMARY KEY (`s1`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS `t3`;
CREATE TABLE `t3` (
  `s1` int(11) DEFAULT NULL,
  KEY `s1` (`s1`),
  CONSTRAINT `t3_ibfk_1` FOREIGN KEY (`s1`) REFERENCES `t2` (`s1`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
确保数据库不再更新,导出所有数据
[root@master mysql]# /opt/mysql/bin/mysqldump --default-character-set=latin1 --quick --no-create-info --extended-insert  -uroot -p -B oldboy > zhulh/alldata.sql
修改latin1为utf8:(将SET NAMES latin1 修改成SET NAMES utf8)
[root@master mysql]# sed -i "s/latin1/utf8/" zhulh/alldata.sql
删除老库:
root@mysql5.6 01:09:24->drop database oldboy;
Query OK, 4 rows affected (0.20 sec)
新建新库:
root@mysql5.6 01:12:53->create database oldboy default charset utf8;
Query OK, 1 row affected (0.00 sec)
导入数据:
[root@master mysql]# mysql -uroot -p123456 oldboy < zhulh/alltable.sql 
Warning: Using a password on the command line interface can be insecure.
[root@master mysql]# mysql -uroot -p123456 oldboy < zhulh/alldata.sql 
Warning: Using a password on the command line interface can be insecure.
[root@master mysql]# mysql -uroot -p123456 -e "select * from oldboy.student;"
Warning: Using a password on the command line interface can be insecure.
+----+-----------+
| id | name      |
+----+-----------+
|  1 | oldboy    |
|  2 | oldgirl   |
|  3 | inca      |
|  4 | zuma      |
|  5 | kaka      |
|  6 | ???       |
|  7 | 老男孩    |
+----+-----------+
[root@master mysql]# 

免责声明:文章转载自《MySQL之对数据库库表的字符集的更改》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇从零搭建 ES 搜索服务(五)搜索结果高亮js实现上传图片下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Linux设置禁止用户登陆

Linux设置禁止用户登陆 vim /etc/shadow 第二栏(密码栏)设为*,会丢失密码 usermod -L username # -L Lock; -U Unlock chsh username -s /sbin/nologin 或直接改文件vim /etc/passwd修改mysql:mysql❌501:501::/mnt/mysql:/sb...

项目中应该怎么选择MySQL的事务隔离级别

知识点总结 1.数据库默认隔离级别: mysql :Repeatable Read; oracle、sql server :Read Commited 2.mysql binlog的格式三种:statement,row,mixed 3.为什么mysql用的是Repeatable Read而不是Read Commited:在 5.0之前只有statement...

18-MySQL DBA笔记-MySQL Server调优

第18章 MySQL Server调优 本章将为读者介绍针对MySQL Server的优化,这也是DBA最熟悉的领域之一。首先我们介绍MySQL的主要参数,然后,讲述常见硬件资源的优化。我们假设读者已经具备了足够的基础知识,所以,本章将更多的针对一些特定的主题进行叙述。18.1 概述 衡量数据库性能的指标,一般衡量数据库的性能有两个指标:响应时间和吞吐率。...

mysql distinct

在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供 有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。其原因是 distinct只能返回它的目标字段,而无法返回其它字段,这个问题让我困扰了很久,用distinct不能解决的话,我只有用二重循环查询来解决...

Flink RichSourceFunction应用,读关系型数据(mysql)数据写入关系型数据库(mysql)

1. 写在前面 Flink被誉为第四代大数据计算引擎组件,即可以用作基于离线分布式计算,也可以应用于实时计算。Flink的核心是转化为流进行计算。Flink三个核心:Source,Transformation,Sink。其中Source即为Flink计算的数据源,Transformation即为进行分布式流式计算的算子,也是计算的核心,Sink即为计算后的...

element-ui的table,切换左侧树数据替换后高度变小问题

页面结构为左侧是树,右侧是表格,当切换左侧树时候,右侧表格数据改变,但是表格高度会变小,网上找的两种解决方法 方法一: 在表格数据改变后执行: this.$nextTick(()=>{ 表格加上ref='table' this.$refs.table.doLayout() }) 方法二: 1.固定表头高度 2.body_wrapper使用calc...