mysql vim 退不出_字符集问题之 MySQL, Linux终端, vim
一、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相关推荐
- mysql 数据库字符集转换_字符集介绍及mysql数据库编码转换
一.字符集介绍: 1.ASCII ASCII是英文American Standard Code for Information Interchange的缩写,美国标准信息交换代码是由美国国家标准学会( ...
- mysql 查询编码转换_字符集介绍及mysql数据库编码转换
一.字符集介绍: 1.ASCII ASCII是英文American Standard Code for Information Interchange的缩写,美国标准信息交换代码是由美国国家标准学会( ...
- 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 ...
- mysql检索有什么区别_检索行时,MySQL中AND或OR运算符有什么区别?
AND,OR之间的区别在于,AND评估两个条件都必须为真,以使整体条件为真.OR求一个条件必须为真,以使整体条件为真. 让我们创建一个表-mysql> create table demo70 − ...
- mysql增量备份具体步骤_记一次mysql全量备份、增量备份的学习过程
增量备份依赖于全量备份,因此首先要有全量备份,在全量备份的基础上,添加增量备份. 为了方便操作,我们先来做些准备工作.在客户端直接输入mysql.mysqldump.mysqladmin.mysqlb ...
- mysql 备份到别的机器_物理拷贝备份mysql到其他机器上恢复
经常会遇到mysql数据要迁徙的情况 ,逻辑导出是可以的 但是就是太慢 第三方工具也同样可以用 也是操作麻烦,最简单粗暴的方式就是直接拷贝物理文件来的最快 也很简单 当然 前提是远程服务器和目标服务器 ...
- 实现MySQL高可用群集配置_配置高可用性的MySQL服务器负载均衡群集
mysql -u root -p USE mysqlclustertest; SELECT * FROM testtable; quit; SELECT查询出的结果应该依然是: mysql> S ...
- mysql不显示默认密码_免安装版mysql不出现默认密码状况(基于mysql8.0)
可以使用免密码安装命令 mysqld --initialize-insecure(建议使用这个命令) mysqld install net start mysql 然后启动了 进入mysql: mys ...
- mysql使用已有的数据库_使用SQL操作MySQL数据库
用SHOW显示已有的数据库 句法:SHOW DATABASES [LIKE wild] 如果使用LIKE wild部分,wild字符串可以是一个使用SQL的"%"和"_& ...
最新文章
- 写了个Linux包过滤防火墙
- hausdorff距离
- 部分 CM11 系统 Android 平板执行植物大战僵尸 2 黑屏的解决的方法
- A Simple Problem with Integers
- 每天一道LeetCode-----计算小于n的素数个数
- C++ 数据结构 线性链表
- 数字孪生及其在航空航天中的应用
- Uploadify jquery+flash+UploadHandler.ashx .(用)
- mac终端编写c语言,【新手提问】有知道用mac终端编c语言的网络编程的人吗?
- MYSQL的递归查询
- ES查看索引库结构和数据
- c语言自由存储区,C/C++ 内存分区以及自由存储区和堆的区别
- DBA常用的一些视图和sql
- Android Menu
- python 爬取直播_Python爬取直播视频
- CAM表含义及各层交换机介绍
- 新版Namecheap域名转出注册商方法解锁及获取转移
- 桌面上的图标不见了怎么办?小技能分享
- 剑指 Offer 52—— 两个链表的第一个公共节点
- 【龙芯1c库】封装模拟I2C接口和使用示例
热门文章
- leetcode 687. Longest Univalue Path | 687. 最长同值路径(树形dp)
- leetcode 395. Longest Substring with At Least K Repeating Characters| 395. 至少有 K 个重复字符的最长子串(分治法)
- Java函数式编程和Lambda表达式
- 浅谈装饰模式应用于IO中
- 关于pygame和tkinter窗口的那件事-线程
- C++ 基础概念、语法和易错点整理
- canal原理的一些学习-2(HA 模式搭建)
- 博主新书:《大数据日知录:架构与算法》目录
- set,存放不重复数据的集合类型
- Leecode05. 最长回文子串——Leecode大厂热题100道系列