Mysq中文l乱码问题涉及的关键参数

来源:互联网 发布:matlab中矩阵的点乘 编辑:程序博客网 时间:2024/05/29 15:13

一、涉及的参数

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_clientcharacter_set_connectioncharacter_set_results三个参数是在连接时确定的,是动态改变的,可以由连接的发起方(jdbc或者客户端)控制,也可以由Mysql的默认值决定。

2、character_set_database 是在建立数据库时指定的,它是该数据库下所有表和字段的默认取值。


 
                                                      

1 0
原创粉丝点击