博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql字符集转换 过程
阅读量:3636 次
发布时间:2019-05-21

本文共 3406 字,大约阅读时间需要 11 分钟。

http://blog.csdn.net/wyzxg/article/details/8779682

author:skate

time:2013/04/09

mysql字符集小结

 

今天同事阿杰兄发现内部一台mysql测试服务器乱码,以前也记录过关于字符集的,今天再补充下

 

修改mysql的字符集和默认存储引擎 

 

查看库现有的字符集:

mysql> show variables like '%char%';
+--------------------------+------------------------------+
| Variable_name            | Value                        |
+--------------------------+------------------------------+
| character_set_client     | latin1                       | 
| character_set_connection | latin1                       | 
| character_set_database   | latin1                       | 
| character_set_filesystem | binary                       | 
| character_set_results    | latin1                       | 
| character_set_server     | latin1                       | 
| character_set_system     | utf8                         | 
| character_sets_dir       | /mysql/share/mysql/charsets/ |

mysql和字符集有关的变量
character_set_client:客户端请求数据的字符集
character_set_connection:从客户端接收到数据,然后传输的字符集
character_set_database:默认数据库的字符集,无论默认数据库如何改变,都是这个字符集;如果没有默认数据库,那就使用 character_set_server指定的字符集,

                                               这个变量建议由系统自己管理,不要人为定义。

character_set_filesystem:把os上文件名转化成此字符集,即把 character_set_client转换character_set_filesystem, 默认binary是不做任何转换的
character_set_results:结果集的字符集
character_set_server:数据库服务器的默认字符集
character_set_system:这个值总是utf8,不需要设置,是为存储系统元数据的字符集

 

一个完整的用户请求的字符集转换流程是

   1) mysql Server收到请求时将请求数据从character_set_client转换为character_set_connection
   2) 进行内部操作前将请求数据从character_set_connection转换为内部操作字符集,步骤如下
        A. 使用每个数据字段的CHARACTER SET设定值;
        B. 若上述值不存在,则使用对应数据表的字符集设定值
        C. 若上述值不存在,则使用对应数据库的字符集设定值;
        D. 若上述值不存在,则使用character_set_server设定值。
   3) 最后将操作结果从内部操作字符集转换为character_set_results

   
假如我们要想设定的字符集是utf8的话,步骤如下:

1)修改配置文件

在[client]下添加如下参数,影响系统变量character_set_client和character_set_connection和character_set_results
default-character-set=utf8

在[mysqld]下添加如下参数,影响系统变量character_set_server和character_set_database

default-character-set=utf8

设置完后,启动mysql,我们只需要查看系统变量是否符合我们的要求即可

character_set_client     
character_set_connection 
character_set_database   
character_set_results    
character_set_server

如下三个系统变量不需要关心,不会影响乱码

character_set_filesystem     
character_set_system     
character_sets_dir        

 

修改结果:

mysql> show variables like '%char%';
+--------------------------+------------------------------+
| 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       | /mysql/share/mysql/charsets/ |

 

到这就完了吗?我们还没有调整字符序(collation),字符序确定在同一字符集内字符之间的比较规则

 

mysql> show variables like '%colla%';

+----------------------+-------------------+
| Variable_name        | Value             |
+----------------------+-------------------+
| collation_connection | utf8_general_ci   | 
| collation_database   | utf8_general_ci   | 
| collation_server     | utf8_general_ci   | 
+----------------------+-------------------+

collation_connection:在配置文件里调整[client]default-character-set就可以控制这个参数
collation_server:配置文件里调整[mysqld]collation_server=utf8_general_ci,一定要和[mysqld]default-character-set使用相同字符集
collation_database:在配置文件里调整[mysqld]default-character-set就可以控制这个参数

总的来说要想把字符集调整为utf8的话,在配置文件里需要添加如下几项

[client]

default-character-set=utf8

[mysqld]

default-character-set=utf8
collation_server=utf8_general_ci

命令说明:
mysql> SET NAMES 'utf8';  它相当于下面的三句命令,当如下三个变量不一致,或显示乱码时,可以用这个命令

mysql> SET character_set_client = utf8;  

mysql> SET character_set_results = utf8;   
mysql> SET character_set_connection = utf8;

查看安装的字符序

mysql> show collation; 
查看安装的字符集
mysql> show character set;

 

参考:

你可能感兴趣的文章
到底买不买(PAT)
查看>>
一家人
查看>>
小李发奖金
查看>>
java学习路线图
查看>>
问题 A: 回文质数 Prime Palindromes
查看>>
问题 C: Antiprime数
查看>>
求给定精度的简单交错序列部分和
查看>>
关于lower_bound( )和upper_bound( )的常见用法
查看>>
问题 C: 转圈游戏
查看>>
问题 A: A的B次方
查看>>
问题 B: 序列的第k个数
查看>>
线段数
查看>>
数列操作 — 线段树入门
查看>>
2016 ICPC大连赛区 [Cloned] H - To begin or not to begin
查看>>
2016 ICPC大连赛区 [Cloned] I - Convex
查看>>
2016 ICPC大连赛区 [Cloned]J - Find Small A
查看>>
Openstack 1
查看>>
Mac 怎么通过自带终端连接linux服务器
查看>>
【模式匹配】KMP算法的来龙去脉
查看>>
Openstack2
查看>>