不同的编码格式会导致同一字符,在不同字符集下的编码会不同。同样同一编码在不同的字符集中代码的字符也不相同。当你的MySQL返回的字符串的编码格式(字符集)与你的客户工具程序使用的字符集不同时,就会造成乱码。
MySQL中默认字符集的设置有四级:服务器级,数据库级,表级 。最终是字段级 的字符集设置。注意前三种均为默认设置,并不代码你的字段最终会使用这个字符集设置。
MySQL中默认字符集的设置有四级:服务器级别 > 数据库级别 > 表级别 > 列级别。如果后者没有显示指定字符集,那么将采用前者的字符集。
MySQL默认字符集MySQL对于字符集的指定可以细化到一个数据库,一张表,一列.传统的程序在创建数据库和数据表时并没有使用那么复杂的配置,它们用的是默认的配置.
(1)、编译MySQL 时,指定了一个默认的字符集,这个字符集是 latin1;
(2)、安装MySQL 时,可以在配置文件 (my.ini) 中指定一个默认的的字符集,如果没指定,这个值继承自编译时指定的;
(3)、启动mysqld 时,可以在命令行参数中指定一个默认的的字符集,如果没指定,这个值继承自配置文件中的配置,此时 character_set_server 被设定为这个默认的字符集;
Server 1、查看数据库的编码方式命令 mysql> show variables like 'character%'; +--------------------------+----------------------------+ | 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/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.00 sec)其中
- character_set_client 客户端来源数据使用的字符集编码; - character_set_connection 为建立连接使用的编码(从客户端接收到数据,然后传输的字符集); - character_set_database 默认数据库的字符集编码; - character_set_filesystem 把os上文件名转化成此字符集,即把 character_set_client转换character_set_filesystem, 默认binary是不做任何转换的 - character_set_results 查询结果字符集编码; - character_set_server 数据库服务器的默认字符集编码; - character_set_system 系统元数据(字段名等)字符集,是为存储系统元数据的字符集; 2、另一组查看数据库编码的命令 mysql> show variables like 'collation%'; +----------------------+-----------------+ | Variable_name | Value | +----------------------+-----------------+ | collation_connection | utf8_general_ci | | collation_database | utf8_general_ci | | collation_server | utf8_bin | +----------------------+-----------------+ 3 rows in set (0.00 sec)