设为首页 收藏本站
查看: 709|回复: 0

[经验分享] MYSQL避免中文乱码的小例子_包含数据库建立 表建立 数据导入 数据导出

[复制链接]

尚未签到

发表于 2016-10-19 07:56:08 | 显示全部楼层 |阅读模式
  前言:

  本人一直以来被MYSQL 数据库乱码问题所困扰---
DSC0000.gif
生气ING
  今天特意做一个prototype,从零开始创建一个DB


  并练习使用mysqldump导出sql文件作为备份,导入sql文件恢复数据库

  
  概述:

  
  为了避免MYSQL 中文乱码的情况发生,我们需要注意以下几点:
  1 建立数据库时候指定编码方式为utf8
  mysql> create database test character set utf8
;


  2 建立表结构的时候需要指定编码方式 为utf8
  CREATE TABLE `homes` (

  xxxxxxx

) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8

;
  3 备份数据库时需要指定编码方式 latin1
  #mysqldump -u root -proot -F  --default-character-set=latin1

test> /var/lib/mysql/doc/homes_2012_11_08.sql
  4 恢复数据库时候(单纯恢复表结构表数据,数据库并未删除) 不需要指定数据库编码方式
  # mysql -uroot -proot test < /var/lib/mysql/doc/homes_2012_11_08.sql
  
  步骤

  第一步 创建数据库
  1 登录MYSQL --
>太简单了 命令行省略掉

  2 创建一个新的DB --> 注意哦 数据库的字符编码方式我设置成为 utf8

  mysql> create database test character set utf8
;


  3 下面来验证一下 ---> 查询结果DB的字符编码方式确实是utf8

  mysql> use information_schema
  mysql> select * from SCHEMATA where SCHEMA_NAME='test
';

+--------------+-------------+----------------------------+------------------------+----------+

| CATALOG_NAME | SCHEMA_NAME | DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME | SQL_PATH |

+--------------+-------------+----------------------------+------------------------+----------+

| NULL         | test        | utf8                       | utf8_general_ci

        | NULL     |

+--------------+-------------+----------------------------+------------------------+----------+

1 row in set (0.00 sec)
  4 创建一张表
  

[iyunv@localhost share]# mkdir /var/lib/mysql/
doc   
                                       --->在mysql存放数据的文档下面创建doc文件夹 专门存放.sql 文件



[iyunv@localhost share]# touch /var/lib/mysql/doc/homes.sql

[iyunv@localhost share]# vi /var/lib/mysql/doc/homes.sql --->编辑.sql文件 包含生成创建SQL语句的信息


DROP TABLE IF EXISTS `homes`;
CREATE TABLE `homes` (
`id` bigint(33) NOT NULL AUTO_INCREMENT,
`name` varchar(60)  NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
insert into homes
values('','永外民主东街');
insert into homes
values('','紫竹桥南');
insert into homes
values('','三元桥');
insert into homes
values('','将府家园');
   
  
  [iyunv@localhost mysql]# mysql -uroot -proot -e
"source /var/lib/mysql/doc/homes.sql" test
     ------>不进入MYSQL数据执行.sql建表语句命令


  
  第二步 导出数据库内容到指定文件  ------>备份数据库操作


  #mysqldump -u root -proot -F  --default-character-set=latin1
test> /var/lib/mysql/doc/homes_2012_11_08.sql
  --->指定字符编码为 latin1

  指定备份的数据库为test

  -F表示新生成一个日志文件

  查看这个导出的sql文件 内容如下

/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `homes`
--
DROP TABLE IF EXISTS `homes`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `homes` (
`id` bigint(33) NOT NULL AUTO_INCREMENT,
`name` varchar(60) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `homes`
--
LOCK TABLES `homes` WRITE;
/*!40000 ALTER TABLE `homes` DISABLE KEYS */;
INSERT INTO `homes` VALUES (1,'永外民主东街'),(2,'紫竹桥南'),(3,'三元桥'),(4,'将府家园');
/*!40000 ALTER TABLE `homes` ENABLE KEYS */;
UNLOCK TABLES;

  查看新生成的二进制日志文件
  #mysqlbinlog /var/lib/mysql/doc/bing.000015

/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
mysqlbinlog: File 'bing.000015' not found (Errcode: 2)
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;

   第三步 导入SQL 文件到数据库 -->还原操作

  1 模仿数据库崩溃操作  删除数据库新创建的表 -- homes
  2 执行以下命令恢复数据库
  [iyunv@localhost doc]# mysql -uroot -proot test < /var/lib/mysql/doc/homes_2012_11_08.sql
  或者
  进入MYSQL后执行以下命令
  mysql>use test;
  mysql>set character set latin1;   --->设置编码方式 保证数据库不是乱码 可省略

  mysql>source    /var/lib/mysql/doc/homes_2012_11_08.sql;
  3 查询 -- 成功
  

mysql> select * from homes;
+----+--------------------+
| id | name               |
+----+--------------------+
|  1 | 永外民主东街 |
|  2 | 紫竹桥南       |
|  3 | 三元桥          |
|  4 | 将府家园       |
+----+--------------------+

  

  
  知识补充

  
  MYSQL 允许定义任何级别的字符集和校对规则,在同一台服务器、同一个数据库或甚至在同一个表中使用不同字符集或校对规则来混合字符串。

  ==========================MYSQL 字符集的参考资料============================

http://www.oklinux.cn/html/sql/mysql/20090227/67808_2.html

======================================================================

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-288129-1-1.html 上篇帖子: BIND+Mysql实现DNS轮询泛解析和IP视图 下篇帖子: mysql>命令行下可以使用的各种命令解析(使用help或者help contents查看更多信息)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表