ubuntu下更改mysql的字符编码后mysql无法启动

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ubuntu下更改mysql的字符编码后mysql无法启动相关的知识,希望对你有一定的参考价值。

系统:ubuntu 12.04
更改字符的方法从网上查的:
停止mysql的运行 /etc/init.d/mysql start (stop) 为启动和停止服务器
MySQL主配置文件为my.cnf,一般目录为/etc/mysql
var/lib/mysql/ 放置的是数据库表文件夹,这里的mysql相当于windows下mysql的date文件夹
当我们需要修改MySQL数据库的默认编码时,需要编辑my.cnf文件进行编码修改,在linux下修改mysql的配置文件my.cnf,文件位置默认/etc/my.cnf文件
找到客户端配置[client] 在下面添加
default-character-set=utf8 默认字符集为utf8
在找到[mysqld] 添加
default-character-set=utf8 默认字符集为utf8
init_connect='SET NAMES utf8' (设定连接mysql数据库时使用utf8编码,以让mysql数据库为utf8运行)
修改好后,重新启动mysql 即可。

但是这样改后,mysql 根本无法启动,谁知道怎么回事a

1 这个方法本身没错,但注意修改后只是针对以后创建的数据库才可用。
2 此类错误,先查看/var/lib/mysql/下的错误日志,分析其中的说明或贴上来。追问

这个地方新版本的mysql不能在[mysqld]标签下添加default-character-set=utf8,换成character-set-server=utf8就对了,但是这样后,show variables like 'character%'查看默认编码确实是utf8的,可是只要插入中文数据,编码立马又变成了latin1,不知道怎么回事。即便是把原先的表删除,重新建表,重新插入,也会变成latin1编码。

追答

1 数据库的字符集采取的顺序是:
字段级指定的字符集,如create table c (a varchar(20) character set gbk);
如字段未指定,则采用表指定的,如create table c (a varchar(20)) charset gbk;
如表未指定字符集,则采用所在数据库指定的字符集,如create database t charset gbk;
如所在数据库未指定,则采用数据库服务器指定的字符集,这个就是在配置文件里设置的character-set-server 或 default-character-set(mysql5.5开始使用这个);
2 由上原则:
(1)对已存在的表,应该先查看字段级和表级的情况,show create table t; 你的这种情况可能就是表的charset 是 latin1,建议 重建数据库,按latin1导出,按gbk导入即可;
(2)对已存在的数据库,查看其字符集,show create database test; 如是latin1,可以修改为gbk,这样对以后创建的表你就可以省略指定字符集;

参考技术A 或者你尝试使用命令的方式直接修改呢

以上是关于ubuntu下更改mysql的字符编码后mysql无法启动的主要内容,如果未能解决你的问题,请参考以下文章

ubuntu16.04.1下的mysql修改默认编码

Mac下更改Mysql5.7的默认编码为utf8

mysql 更改数据库字符编码的方法

ubuntu更改mysql的编码配置

MySQL 字符编码设置

更改docker里mysql的字符编码