MySQL的字符集设定

我们有时在查看数据库数据时,看到一写乱码,这是由于mysql数据库字符集设定的问题,下面我就来谈谈如何正确设定字符集

在mysql中可以设定的字符集有:①服务器默认字符集 ②数据库字符集 ③表的字符集 ④列的字符集。
如果一个级别没有设置字符集,则继承上一级的字符集,即如果表没有设置字符集会自动继承数据库的字符集

mysql> show character set;                     #查看mysql支持的字符集
mysql> 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       | /usr/local/mysql/share/charsets/  |
+--------------------------+-----------------------------------+

举个简单的例子:

1、告诉服务器(准确的是告诉转换器),我给你发送给的是是什么编码?
set character_set_client = 'utf8';
2、告诉转换器,转换成什么编码?
set character_set_connection = 'utf8';
3、查询结果用什么编码?
set character_set_results = 'utf8';

如果以上三者字符集都为 'utf8',可以简写成  set names 'utf8';即为
set character_set_client = 'utf8';
set character_set_connection = 'utf8';  
set character_set_results = 'utf8'; 

这里写图片描述

什么时候产生乱码

①client声明与事实不符
②results与客户端页面不符

什么时候会丢失数据

转换器的字符集connection 和 服务器字符集server  比 客户端client字符集范围小
字符编码的演变过程:ASCII --> GB2312 --> GBK --> GB18030 --> Unicode --> UTF-8

备注:
我们在设置客户端和服务器字符集的时候可以直接在mysql的 my.cnf 配置文件中设定,并将其放置在对应的标签下即可。

[client]
default-character-set = utf8   #client端字符集

[mysqld]
character_set_server = utf8    #服务器字符集
MySQL表、字段、库的字符集修改及查看方法
修改数据库字符集:
ALTER DATABASE db_name DEFAULT CHARACTER SET character_name [COLLATE ...];   

把表默认的字符集和所有字符列(CHAR,VARCHAR,TEXT)改为新的字符集:
ALTER TABLE tbl_name CONVERT TO CHARACTER SET character_name [COLLATE ...]  
如:ALTER TABLE logtest CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; 

只是修改表的默认字符集:
ALTER TABLE tbl_name DEFAULT CHARACTER SET character_name [COLLATE...];  
如:ALTER TABLE logtest DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; 

修改字段的字符集:
ALTER TABLE tbl_name CHANGE c_name c_name CHARACTER SET character_name [COLLATE ...];  
如:ALTER TABLE logtest CHANGE title title VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci; 

查看数据库编码:
SHOW CREATE DATABASE db_name;   

查看表编码:
SHOW CREATE TABLE tbl_name;   

查看字段编码:
SHOW FULL COLUMNS FROM tbl_name;  

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值