macOSX下,如何永久更改Mysql的字符编码格式

经常使用mysql的程序猿(媛)深知,在windows环境搭建mysql环境还是比较简单的,安装完成后,就可以启动配置功能,进行配置,所以,mysql的密码和mysql的编码格式可以很方便的一次性解决。但是,mac用户,尤其是mysql新手,在安装mysql的过程中,便会遇到各种拦路虎。诸如:无法修改登录密码,无法永久修改字符串编码格式等等。

现在我们就一起来彻底解决字符串编码的问题。

mysql安装完成后,输入如下命令查看当前mysql的编码格式:

很显然character_set_database和character_set_server依然是latin1的字符集,也就是说mysql后续创建的表都是latin1字符集的,不是utf8,会造成一些麻烦。所以有必要修改my.cnf。下面正式开始我们的工作。

工作目的:修改mysql的默认编码方式:

1,关闭mysql服务

在对mysql的配置文件手动进行修改前,请确保关闭mysql服务。不然会遇到mysql的sock不能连接的问题

在mac下,打开“系统偏好设置”->选择“mysql”->“stop MySQL server”

如下图所示:

扫描二维码关注公众号,回复: 1715928 查看本文章

2,准备my.cnf文件

很多童鞋会说,我可以直接在mysql的命令行模式下,直接输入命令来修改字符编码啊,可是你是否发现,下次再使用的时候,字符编码还是变成latin1了呢?众所周知,mysql的全局配置文件在my.cnf文件里面,可是问题来了,网上说mac下把mysql目录里的support-files中的my-medium.cnf拷贝到/etc下并改名my.cnf并进行修改,可是你没发现mysql5.6或者5.7安装目录下已经没有这个文件了吗?但是有一个my-defalut.cnf的文件,和我们期待的my.cnf还是有点像的嘛,不妨打开看看,我们看到这样的文字内容:

#include <iostream>
 2 #include <set>
 3 #include <functional>
 4 using namespace std;
 5 int main()
 6 {
 7     set<int, greater<int>> s;  //创建一个set容器,元素按降序排列
 8     multiset<char> ms;  //创建一个multiset容器
 9     cout << "s能容纳的最大元素数量" << s.max_size(thd178.com) << endl;
10     cout << "ms能容纳的最大元素数量" << ms.max_size() << endl;
11     //向s中插入元素
12     pair<set<int>www.yigouyule2.cn::iterator, bool> ps;
13     ps = s.insert(12);
14     if (ps.second == true)
15         cout << "insert success" << endl;
16     s.insert(39);
17     s.insert(32);
18     s.insert(26);
19     //向ms中插入元素
20     ms.insert(thd178.com'a');
21     ms.insert('z');
22     ms.insert('T');
23     ms.insert('u');
24     ms.insert('u');
25     //输出两个容器中的元素
26     set<int>::iterator its; //创建s容器的迭代器,用于获取元素
27     cout << "s容器中元素:";
28     for (its = s.begin(www.yongxinzaixian.cn); its != s.end(); its++)
29         cout << *its << " ";
30     cout << endl;
31     multiset<char>::iterator itms;  //创建ms容器的迭代器
32     cout << "ms容器中元素:";
33     for (itms = ms.begin(); itms != ms.end(www.hjha178.com/); itms++)
34         cout << *itms << " ";
35     cout << endl;
36 
37     //查找两个容器中头尾元素
38     cout << "s头元素: " www.120xh.cn  << *s.begin() << endl;
39     cout << "ms尾元素: " << *(--ms.end()) << e

看到红色框标注的文字,提示我们说,他建议我们可以到http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html去查看详细配置说明,我们不应该直接修改这个文件,这仅仅是在安装过程中生成的一个模板文件而已,如果你升级到新版本的mysql,这个文件会被替换掉。

大概就是说my-default.cnf是作为模版文件来生成my.cnf的,所以我们就直接复制一份,使用命令:

sudo cp my-default.cnf my.cnf 得到一份my.cnf文件。

3,修改my.cnf文件

按网上说的

在[client]部分加入:

default-character-set=utf8

在[mysqld]部分加入:

character-set-server=utf8

其中[client]和[mysqld]就是option groups,没有就自己编写,保存退出。可能在编辑过程中会遇到提示说该文件为只读文件,那么使用那个命令修改读写权限:

sudo chmod  +w my.cnf

修改完成后,保持修改。

4,正确存放my.cnf文件

这是比较关键的一部,很多童鞋反映,修改后,还是不能生效,如何破呢?
这里有两个细节,首先,我们怎么知道my.cnf文件究竟应该存放在哪里呢?
打开终端工具,输入:mysql --help
接着一直往下看:看到我红色标注的部分。
mysql的帮助信息提示我们,my.cnf文件的应用优先次序如下,那么为了简单,我们就直接把我们修改好的my.cnf文件直接拷贝到/etc文件夹下面,换言之,我们让/etc/my.cnf文件作为我们mysql的全局配置文件生效。
 
到这里位置,很多童鞋就按照很多教程说的那样,直接重启mysql服务器,并迫不及待的去查看字符编码格式,那么问题来了结果还是这样:
究竟是为什么呢,其实,这个时候,如果你在命令行使用mysql,你应该会得到一个警告信息:
Warning: World-writable config file '/etc/my.cnf' is ignored ,提示说,/etc/my.cnf文件为可读写,仔细查看mysql文档,得知,为了安全,该文件的权限只能是只读,因此,修改权限:
sudo chmod 644 my.cnf。
再打开命令提示符窗口,查看:

猜你喜欢

转载自www.cnblogs.com/qwangxiao/p/9216414.html