mysql数据库编码设置

阅读更多
开发时发现,写mysql数据库乱码,使用 SHOW VARIABLES LIKE 'character%';查询发现
character_set_database
character_set_server的编码方式为latin1,这个是mysql安装时的默认编码,不支持中文。

通过修改mysql配置文件解决该问题,方法如下:
找到/etc/my.cnf,
在【client】下增加配置default-character-set=utf8,
在【mysqld】下增加character-set-server=utf8
重启mysql,问题解决。

在修改my.cnf时,遇到下面一系列问题:
问题1:忘记root账户密码。
解决办法:以安全模式启动mysql,修改root密码。在my.cnf配置【mysqld】下增加
【skip-grant-tables skip-networking】两个配置项,或执行命令【sudo /mysqld_safe --skip-grant-tables --skip-networking】
【--skip-networking,避免远程无密码登录MySQL。】

重启直接用root账户无密码登录:
mysql -u root

重设密码:
mysql> use mysql;
mysql> update user set password=PASSWORD("newpassword") where User='root';
mysql> flush privileges;
问题解决。

问题2:修改my.cnf后不能保存,报【'readonly' option is set (add ! to override)】
解决办法:无写权限,执行【sudo chmod 777 /etc/my.cnf】命令,又报【World-writable config file ‘/etc/my.cnf’ is ignored】,写权限范围太大,执行【sudo chmod 644 /etc/my.cnf】,问题解决。

问题3:执行【sudo /mysqld_safe --skip-grant-tables --skip-networking】命令时报【command not found错误】
原因:【在执行Linux命令时,如果在其前面加上sudo,就表示以root权限执行。但是这其实是有一个前提的,就是只有那些Linux内置系统命令才可以用如此的形式来执行,而对于Shell内置命令或其他用户自定义命令、别名等,是不能用sudo来使用root权限的。】【因为当在Linux下用sudo执行某一命令时,是在原进程(parent process)的基础上fork出来一个子进程(child process),这个子进程是以root权限执行的。然后在子进程中,执行你在sudo后面跟的命令。
在子进程中是无法调用涉及到父进程的状态的一些命令的,所以非系统内置命令会被拒绝。这就是为什么会出现command not found的提示。】

解决办法使用绝对路径:
【sudo /usr/local/mysql/bin/mysqld_safe --skip-grant-tables --skip-networking】
问题解决。

问题4:执行【service mysql stop】提示:cat: /usr/local/mysql/data/iZ23bv4qfbdZ.pid: Permission denied

解决方法:执行【sudo service mysql stop】


你可能感兴趣的:(mysql数据库编码设置)