mysql 对于字符集的支持细化到四个层次: 服务器(server),数据库(database),数据表(table)和行()。
查看mysql字符编码:
mysqli_query($conn,"set names gb2312");
实质是设置了三个:
要让 mysql 不出现乱码,要点是在于数据库连接的编码方式,而数据库表的编码方式并不重要,mysql 会自动做好编码转换工作。
·数据库表的编码方式
要让 mysql 不出现乱码,要点是在于数据库连接的编码方式,而数据库表的编码方式并不重要,mysql 会自动做好编码转换工作。
在做数据库设计时,怎么选择编码方式呢?
应该考虑另外几个因素,比如:
1,字符集的兼容性。如果预期将在一个字段中同时保存简体、繁体、日文等字符,则必须选择一个能同时容纳这几种字符集的编码方式,一般来说,utf-8 是最好的选择。
2,存储效率。如果预期仅保存简体中文,那么选择 gbk 会比 utf-8 的存储效率高一些。
不过,似乎大多数情况下,这一因素并不很重要。
3,结合实际的应用情况,尽量减少数据库访问过程中的编码转换环节。
如以下所示的传输过程,其中“c转换”是客户端的转换工作(可能是应用程序负责,也可能是 driver 负责,比如 jdbc driver),“s转换”是服务端的编码转换(由 mysql 自动进行)。
客户端程序 ------------> 客户端接口 ----------> 服务端接口 --------------> 数据库存储
ucs2/gbk/… c转换 编码传输 s转换 utf-8/gbk/…
客户端程序 <------------ 客户端接口 <---------- 服务端接口 <------------ 数据库存储
ucs2/gbk/… c转换 编码传输 s转换 utf-8/gbk/…