一、MySQL 与 set names 有关的三个变量:

1. character_set_client:只是用来(向MySQL服务器)说明客户端使用的sql语句采用的是什么编码,并不会进行转换。

2. character_set_connection:见MySQL文档。

3. character_set_result:见MySQL文档。

值得注意的是另外两个变量:

character_set_server 与 character_set_database:他们是用来指示MySQL最终以什么样的编码把数据存到磁盘上,这时会做必要的变换(这一点从实践中得出,MySQL文档中未提到)。其他信息见MySQL文档。

二、character_set_client只起到标示的作用,而且标示得不一定对。那么我客户端的编码究竟是什么?

分三个情景:

1. 在终端中直接写上SQL语句,如 insert into tb_temp(null, "情景一");  这里语句的编码是由locale决定的,通过LANG设置。locale 决定了键盘的输入和终端的显示(这里的“显示”,因理解为终端的输出缓存里的字符的编码)(在某终端里设置,只对该终端有效)。比如,LANG=zh_CN.gbk,那么语句是gbk编码的;LANG=zh_CN.utf8,那么语句是utf8编码的。如果输入到终端的是乱码,那么是 locale的设置 和 终端上的用来解析输出缓存里的字符的编码不一致。

这里顺便提到VIM。有时在VIM中会遇到乱码的情况。encoding变量默认情况下与locale的设置相同。说明文档(:set encoding-names 查看)指出,如果这两者不一致,vim会帮我们转换。前提是你要装好libiconv。不然除了不会给你自动转换,而且一些字符集如gb2312它会提示没有。在VIM命令模式下,使用set fenc? 来查看当前文件的编码。用“set fenc=” 可将文件设置成另一种编码,这也需要libiconv的支持。

我的.vimrc文件内容如下:

*****************************

set nu

set tabstop=4

set encoding=utf8

set fileencoding=utf8

set fileencodings=utf8,chinese,Latin1

*********************************

若不设置fileencodings(工作原理见说明文档),vim中默认fileencodings=ucs-bom,utf-8,latin1。这样的情况下,你的gbk文件在vim是乱码的,因为被当成Latin1编码来显示。fileencoding是用来指定你创建一个文件时所用的编码。(显然,若不设置fileencoding,那么新建的文件会保存成encoding指定的格式)。fileencoding需要与fileencodings配合使用才行。

这样设置好后,便能在LANG=zh_CN.utf8的情况下,编辑gbk以及其他格式的文件。

2.在console里粘贴数据

这种情况下,粘贴进的数据是在终端解释数据所用的字符集里,跟locale无关。

3.使用脚本文件进行mysql的操作

比如 mysql > source /home/aa/test.sql

那么所执行的sql语句的编码与其所在的文件的编码一致。

三、实践指导意义:

1.

mysql数据库的my.cnf 增加如下设置:

[mysqld]

default-character-set = utf8  #以便能存储任何编码的数据

2.

保证程序进行数据库操作前都使用set name xx, 就不会出现乱码。 若进数据库发现有乱码,试着改character_set_result;

mysql vim 退不出_字符集问题之 MySQL, Linux终端, vim相关推荐

  1. mysql 数据库字符集转换_字符集介绍及mysql数据库编码转换

    一.字符集介绍: 1.ASCII ASCII是英文American Standard Code for Information Interchange的缩写,美国标准信息交换代码是由美国国家标准学会( ...

  2. mysql 查询编码转换_字符集介绍及mysql数据库编码转换

    一.字符集介绍: 1.ASCII ASCII是英文American Standard Code for Information Interchange的缩写,美国标准信息交换代码是由美国国家标准学会( ...

  3. mysql mha配置文件详解_十四、MySQL MHA 高可用配置(一)

    MHA 高可用 1.准备三台机器 IP:10.0.0.51 主机名:db01 内存:2G IP:10.0.0.52 主机名:db02 内存:2G IP:10.0.0.53 主机名:db03 内存:2G ...

  4. mysql检索有什么区别_检索行时,MySQL中AND或OR运算符有什么区别?

    AND,OR之间的区别在于,AND评估两个条件都必须为真,以使整体条件为真.OR求一个条件必须为真,以使整体条件为真. 让我们创建一个表-mysql> create table demo70 − ...

  5. mysql增量备份具体步骤_记一次mysql全量备份、增量备份的学习过程

    增量备份依赖于全量备份,因此首先要有全量备份,在全量备份的基础上,添加增量备份. 为了方便操作,我们先来做些准备工作.在客户端直接输入mysql.mysqldump.mysqladmin.mysqlb ...

  6. mysql 备份到别的机器_物理拷贝备份mysql到其他机器上恢复

    经常会遇到mysql数据要迁徙的情况 ,逻辑导出是可以的 但是就是太慢 第三方工具也同样可以用 也是操作麻烦,最简单粗暴的方式就是直接拷贝物理文件来的最快 也很简单 当然 前提是远程服务器和目标服务器 ...

  7. 实现MySQL高可用群集配置_配置高可用性的MySQL服务器负载均衡群集

    mysql -u root -p USE mysqlclustertest; SELECT * FROM testtable; quit; SELECT查询出的结果应该依然是: mysql> S ...

  8. mysql不显示默认密码_免安装版mysql不出现默认密码状况(基于mysql8.0)

    可以使用免密码安装命令 mysqld --initialize-insecure(建议使用这个命令) mysqld install net start mysql 然后启动了 进入mysql: mys ...

  9. mysql使用已有的数据库_使用SQL操作MySQL数据库

    用SHOW显示已有的数据库 句法:SHOW DATABASES [LIKE wild] 如果使用LIKE wild部分,wild字符串可以是一个使用SQL的"%"和"_& ...

最新文章

  1. 写了个Linux包过滤防火墙
  2. hausdorff距离
  3. 部分 CM11 系统 Android 平板执行植物大战僵尸 2 黑屏的解决的方法
  4. A Simple Problem with Integers
  5. 每天一道LeetCode-----计算小于n的素数个数
  6. C++ 数据结构 线性链表
  7. 数字孪生及其在航空航天中的应用
  8. Uploadify jquery+flash+UploadHandler.ashx .(用)
  9. mac终端编写c语言,【新手提问】有知道用mac终端编c语言的网络编程的人吗?
  10. MYSQL的递归查询
  11. ES查看索引库结构和数据
  12. c语言自由存储区,C/C++ 内存分区以及自由存储区和堆的区别
  13. DBA常用的一些视图和sql
  14. Android Menu
  15. python 爬取直播_Python爬取直播视频
  16. CAM表含义及各层交换机介绍
  17. 新版Namecheap域名转出注册商方法解锁及获取转移
  18. 桌面上的图标不见了怎么办?小技能分享
  19. 剑指 Offer 52—— 两个链表的第一个公共节点
  20. 【龙芯1c库】封装模拟I2C接口和使用示例

热门文章

  1. leetcode 687. Longest Univalue Path | 687. 最长同值路径(树形dp)
  2. leetcode 395. Longest Substring with At Least K Repeating Characters| 395. 至少有 K 个重复字符的最长子串(分治法)
  3. Java函数式编程和Lambda表达式
  4. 浅谈装饰模式应用于IO中
  5. 关于pygame和tkinter窗口的那件事-线程
  6. C++ 基础概念、语法和易错点整理
  7. canal原理的一些学习-2(HA 模式搭建)
  8. 博主新书:《大数据日知录:架构与算法》目录
  9. set,存放不重复数据的集合类型
  10. Leecode05. 最长回文子串——Leecode大厂热题100道系列