MySql字符编码详解

MySQL 对于字符集的支持细化到四个层次: 服务器(server),数据库(database),数据表(table)和行()。  mysql

查看:sql

 

  mysqli_query($conn,"set names gb2312");数据库

实质是设置了三个:服务器

 

 

上面咱们看到,要让 MySQL 不出现乱码,要点是在于数据库链接的编码方式,而数据库表的编码方式并不重要,MySQL 会自动作好编码转换工做。编码

 

·数据库表的编码方式spa

 

上面咱们看到,要让 MySQL 不出现乱码,要点是在于数据库链接的编码方式,而数据库表的编码方式并不重要,MySQL 会自动作好编码转换工做。.net

 

那么在作数据库设计的时候,怎么选择编码方式呢?其实这时候考虑的应该是另外几个因素,好比:设计

 

1. 字符集的兼容性。若是预期将在一个字段中同时保存简体、繁体、日文等字符,那你就必须选择一个能同时容纳这几种字符集的编码方式,通常来讲,UTF-8 是最好的选择。orm

 

2. 存储效率。若是预期仅保存简体中文,那么选择 GBK 会比 UTF-8 的存储效率高一些。不过,彷佛大多数状况下,这一因素并不很重要。server

 

3. 结合实际的应用状况,尽可能减小数据库访问过程当中的编码转换环节。以下图所示的传输过程,其中“C转换”是客户端的转换工做(多是应用程序负责,也多是 Driver 负责,好比 JDBC Driver),“S转换”是服务端的编码转换(由 MySQL 自动进行)。


客户端程序 ------------> 客户端接口 ----------> 服务端接口 --------------> 数据库存储
 UCS2/GBK/…  C转换        编码传输         S转换   UTF-8/GBK/…

客户端程序 <------------ 客户端接口 <---------- 服务端接口 <------------ 数据库存储
 UCS2/GBK/…  C转换        编码传输         S转换   UTF-8/GBK/…

 

参考:

【1】http://blog.csdn.net/maquan/article/details/5903131