一、涉及的参数
1、 character_set_client
这个参数的取值由连接的发起方决定,例如使用以下JDBC URL连接时:
jdbc URL = mysql://127.0.0.1:3306/xxx?useUnicode=true&characterEncoding=utf8
则该取值为utf-8, 使用客户端(例如:Nivcat)连接时也有相应的指定方式。 如果未指定就使用数据库默认的值。 注意:如果jdbc url 是写在XML文件中(使用框架时写在配置文件中)需要用& 代替 & 符号 。
它负责标识连接发起方发来的数据是怎样的编码方式,所以该编码的取值务必保证与源数据的编码方式一致,一旦该值与传入数据的真实的编码方式不一致,则会出现乱码 。
2、 character_set_connection
这个参数同样由连接的发起方发来的数据决定,取值默认与character_set_client保持一致。
3、character_set_results
这个参数同样由连接的发起方发来的数据决定,取值默认与character_set_client保持一致,若发起方没有指定编码方式,则直接使用character_set_database的值。
该值是数据库发送数据给宿主程序的编码方式,如果不合适,会导致数据库内数据正常,但是程序接受到的数据乱码。
4、character_set_database
这个参数是在建立数据库时指定的值,如果未指定,则使用系统默认的值。它是一个数据库实例中每个table和字段的默认编码取值,除特殊情况外,通常会保证一个数据库中的所有字段编码方式一致。
二、 总结
1、 character_set_client、character_set_connection、character_set_results三个参数是在连接时确定的,是动态改变的,可以由连接的发起方(jdbc或者客户端)控制,也可以由Mysql的默认值决定。
2、character_set_database 是在建立数据库时指定的,它是该数据库下所有表和字段的默认取值。