博客园 首页 私信博主 显示目录 隐藏目录 管理 动画

my.cnf MySQL 中文编码

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

2、修改mysql配置文件

[root@Hadoop-NN-01 ~]# vi /etc/my.cnf

[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
character-set-server=utf8

[root@Hadoop-NN-01 ~]# vi /etc/my.cnf

[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
character-set-server=utf8mb4
# 初始化连接 mysql 数据库时使用 utf8mb4 编码
# 从客户端接收到数据,然后传输的字符集
init_connect='SET NAMES utf8mb4' 

1、进入MySQL控制台

>mysql -uroot -p     #输入密码进入
>status;             #查看当前MySQL运行状态,如下图所示:

3、重启MySQL服务

[root@Hadoop-NN-01 ~]# service mysqld restart

#再次进入MySQL控制台查看,如下图所示:
>status;

 

>show variables like 'character_set_%';            #查看MySQL字符集

MySQL数据库字符集编码修改完成!

 

参数说明:

character_set_client:客户端请求数据的字符集。

character_set_connection:从客户端接收到数据,然后传输的字符集。

character_set_database:默认数据库的字符集,无论默认数据库如何改变,都是这个字符集;如果没有默认数据库,使character_set_server指定的字符集,此参数无需设置。

character_set_filesystem:把操作系统上文件名转化成此字符集,即把character_set_client转换character_set_filesystem,默认binary即可。

character_set_results:结果集的字符集。

character_set_server:数据库服务器的默认字符集。

character_set_system:这个值总是utf8,不需要设置,存储系统元数据的字符集。

 

# 设置 character_set_database 为 utf8
alter database aaa character utf8
# 发现还是 Latin1,这个是数据库属性

在创建数据库时候
如果没有配置,且不指定,数据库,表和字段字符集,默认就是 Latin1
此时若指定[client]default-character-set=latin1(非默认)
即用 latin1 客户端连接,即使字段字符集是 utf8 也可以正常插入;
此时若指定[client]default-character-set=utf8 (默认)
即用 utf8 客户端连接,插入汉字会提示
Incorrect string value: '\xE7\x9A\x84\xE6\x96\xB9...' for column 'name' at row 1
除非下面四选一
创建数据库时   character set utf8;    database:utf8
创建表时      charset=utf8;          database:latin1 
新增字段时    character set utf8;    database:latin1 
安装数据库后   配置 my.cnf
指定字符集后方可正常插入和查询
这里需要注意:
字段上指定的字符集,优先级最高,即是默认的,在修改表的指定字符集后,也是先跟随这个字段原先自带的,指定的字符集 例如数据库是 latin1 编码,插入数据后,尝试修改: alter database <数据库名> character set utf8; 由于之前数据用 latin1 编码,所以设置 utf8 依旧乱码,需要删除数据重新导入。 所以安装数据库,首要任务就是配置编码 status; show variables like 'character_set%'; vim /etc/my.cnf =========================== [client] # 影响 client、connection、results 字符集 # 优先级低 default-character-set=utf8mb4 [mysql] # 影响数据库status Client characterset: # 影响数据库status Conn. characterset: # 影响 character_set_client 客户端请求数据 # 影响 character_set_connection 客户端接收到数据,传输 # 影响 character_set_results:结果集 # 优先级高 default-character-set=utf8mb4 [mysqld] # 没有数据库字符集时,使用服务器的字符集 # 影响数据库status Server characterset: # 影响数据库status Db characterset: # 影响 character_set_database 数据库默认 # 影响 character_set_server 服务器默认 character-set-server=utf8mb4 # 初始化连接使用的字符集 init_connect='SET NAMES utf8mb4' =========================== characterEncoding=utf8 该参告诉数据库 连接传输使用 UTF8, UTF8 数据在持久化时 会转换为 utf8mb4 存储的格式; 从数据库取数据,会转为 UTF8 传输。 项目和数据库都为 UTF8 的话,可以不写 创建数据库时指定编码: CREATE DATABASE `mydb` CHARACTER SET utf8 COLLATE utf8_unicode_ci; CREATE DATABASE `mydb` CHARACTER SET utf8 COLLATE utf8_general_ci; 测试: show create database mydb \G; create table aaa(name varchar(255))charset=utf8; insert into aaa values ('黄大仙'); show create table aaa; alter table aaa character set latin1; select * from aaa;

原文 : MYSQL中文乱码以及character_set_database属性修改 - 小窝蜗 - 博客园 (cnblogs.com)

 

posted @ 2021-12-16 21:15  CHANG_09  阅读(381)  评论(0)    收藏  举报