笔者今天遇到linux mysql 中文乱码问题,网上解决版本很多但是试过之后均不能解决,最终发现是小问题(版本导致操作命令不同),本文标红部分为笔者所遇到过的问题,请重点关注:
1、进入mysql命令行模式,键入mysql-uroot -p 即可进入。随后键入 SHOW VARIABLES LIKE 'character_set_%';
若显示内容类似这样:
+--------------------------+----------------------------------------------+
| Variable_name | Value |
+--------------------------+----------------------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir |/alidata/server/mysql-5.1.73/share/charsets/ |
则已修改正确,而mysql默认初始设置的都是latin1而非utf8。
2、最根本的解决方法是打开mysql配置文件修改。linux下mysql配置文件名为my.cnf,目录为/etc/my.cnf,打开后按照以下操作:
注:在终端解决方案如下:
sudo gedit /etc/mysql/my.cnf
不能修改时,修改my.cnf权限 sudo chown 777 /etc/mysql/my.cnf
但是,在修改完后必须将权限修改为644然后再次重启,否则导致重启失败。
--在 [mysqld] 标签下加上三行
default-character-set = utf8
character_set_server = utf8
lower_case_table_names = 1 //表名不区分大小写(此与编码无关)
--在 [mysql] 标签下加上一行
default-character-set = utf8
--在 [mysql.server]标签下加上一行
default-character-set = utf8
--在 [mysqld_safe]标签下加上一行
default-character-set = utf8
--在 [client]标签下加上一行
default-character-set = utf8
上述标签若未能全部找到也没关系。再次打开mysql命令行,执行SHOW VARIABLES LIKE 'character_set_%';后若仍存在latin1,则在mysql命令行下执行以下命令:
set character_set_client =utf8;
set character_set_server = utf8;
set character_set_connection = utf8;
set character_set_database = utf8;
set character_set_results = utf8;
set collation_connection = utf8_general_ci;
set collation_database = utf8_general_ci;
set collation_server = utf8_general_ci;
执行后再执行上述show 命令可得到目标结果
3、设置完成后需要重新启动mysql,重启命令/etc/init.d/mysqld restart
注:/etc/init.d/mysqldrestart 或者/etc/init.d/mysql restart
重启失败:可能为版本问题导致,具体解决方案很多,本人采用以下方案并奏效
配置文件my.cnf中删除: default-character-set= utf8
4、重启成功 重新创建数据库与表
注:此处仅重新创建表不能成功