MySQL的字符集设定

Posted 幸福丶如此

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;  

以上是关于MySQL的字符集设定的主要内容,如果未能解决你的问题,请参考以下文章

设定mysql的默认字符集

mysql varchar 字符串长度设定

mysql varchar 字符串长度设定

如何修改MySQL的配置--->如设定默认字符集为utf - 8

linux下mysql设置页大小怎么做呢?配置文件我找不到。要设置max_allowed_packet=32M 还有设定字符集。

mysql中一些表选项