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的配置--->如设定默认字符集为utf - 8
linux下mysql设置页大小怎么做呢?配置文件我找不到。要设置max_allowed_packet=32M 还有设定字符集。