linux下怎么修改mysql的字符集编码

Posted

tags:

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

参考技术A   可直接进入
mysql
进行更改,具体如下:
  1.查找/etc目录下是否有my.cnf文件;
#ls
-l
|
grep
my.cnf
(在/etc下查找是否有my.cnf文件存在)
2.如果没有就要从/usr/share/mysql,拷贝一个到/etc
下,在/usr/share/mysql目录下有五个后缀为.cnf的文件,分别是
my-huge.cnf
my-innodb-heavy-4G.cnf
my-large.cnf
my-medium.cnf
my-small.cnf
;从中随便拷贝一个到/etc目录下并将其改为my.cnf文件,我选择的是my-medium.cnf

#cp
/usr/share/mysql/my-medium.cnf
/etc/my.cnf
3.修改my.cnf文件,在该文件中的三个地方加上
default-character-set=utf8([client]
[mysqld]
[mysql])
#vi
/etc/my.cnf
修改如下:(红色为添加部分)
[client]
#password
=
your_password
port
=
3306
socket
=
/var/lib/mysql/mysql.sock
default-character-set=utf8
[mysqld]
port
=
3306
socket
=
/var/lib/mysql/mysql.sock
skip-locking
key_buffer
=
16M
max_allowed_packet
=
1M
table_cache
=
64
sort_buffer_size
=
512K
net_buffer_length
=
8K
read_buffer_size
=
256K
read_rnd_buffer_size
=
512K
myisam_sort_buffer_size
=
8M
default-character-set=utf8
init_connect='SET
NAMES
utf8'
//此行可不加
[mysql]
no-auto-rehash
default-character-set=utf8
保存退出;
4.重起MySQL服务器,使其设置的内容生效
#/etc/init.d/mysql
restart
5.
重新登入mysql;
#
mysql
-u
root
-
p
#(输入密码)
mysql>
show
variables
like
'character_set%'
;
+--------------------------+----------------------------+
|
Variable_name
|
Value
|
+--------------------------+----------------------------+
|
character_set_client
|
utf8
|
|
character_set_connection
|
utf8
|(都生成了utf8,成功了
哈哈哈)
|
character_set_database
|
utf8
|
|
character_set_filesystem
|
binary
|
|
character_set_results
|
utf8
|
|
character_set_server
|
utf8
|
|
character_set_system
|
utf8
|
|
character_sets_dir
|
/usr/share/mysql/charsets/
|
+--------------------------+----------------------------+
mysql启动和停止
操作

可以通过
#/etc/init.d/mysql
[start
|
stop
|
restart](实现启动,停止,重启)
也可以通过
#service
mysql
[start
|
stop
|
restart](实现启动,停止,重启)
*********************************
另外:如果在修改字符集前,尝试在数据库中插入中文,那么当修改了字符集后,在你所插入中文的数据库中(在别的数据库中可能没问题),
通过show
variables
like
'character_set%'查询的结果可如下:
+--------------------------+----------------------------+
|
Variable_name
|
Value
|
+--------------------------+----------------------------+
|
character_set_client
|
utf8
|
|
character_set_connection
|
utf8
|
|
character_set_database
|
latin1
|
|
character_set_filesystem
|
binary
|
|
character_set_results
|
utf8
|
|
character_set_server
|
utf8
|
|
character_set_system
|
utf8
|
|
character_sets_dir
|
/usr/share/mysql/charsets/
|
+--------------------------+----------------------------+

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 或者你尝试使用命令的方式直接修改呢

以上是关于linux下怎么修改mysql的字符集编码的主要内容,如果未能解决你的问题,请参考以下文章

linux怎么设置mysql 的编码格式

linux怎么修改默认编码

Linux下修改MySQL数据库字符编码为UTF-8解决中文乱码

如何修改MySQL字符集

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

5.7.34修改字符集重启不生效