您的位置:首页 > 数据库 > MySQL

Mysql 中文乱码问题解决办法

2009-04-01 12:28 627 查看
一、
Mysql 字符集。
字符集相关变量:

character_set_server:默认的内部操作字符集

character_set_client:客户端来源数据使用的字符集

character_set_connection:连接层字符集

character_set_results:查询结果字符集

character_set_database:当前选中数据库的默认字符集


character_set_system:系统元数据(字段名等)字符集
其中在解决乱码问题中最关键的三个变量是:
character_set_client character_set_connectioncharacter_set_results

character_set_client指定的是Sql语句的编码,如果设置为 binary,mysql就当二进制来处理,character_set_connection指定了mysql 用来运行sql语句的时候使用的编码,也就是说,程序发送给MySQL 的SQL语句,会首先被MySQL从character_set_client指定的编码转换到character_set_connection指定的 编码,如果character_set_clien指定的是binary,则MySQL就会把SQL语句按照 character_set_connection指定的编码解释执行.
当执行SQL语句的过程中,比如向数据库中插入字段的时候,字段也有编码设置,如果字段的编码设置和character_set_connection指定的不同,则MySQL 会把插入的数据转换成字段设定的编码。SQL语句中的条件判断和SQL插入语句的执行过程类似.
当SQL执行完毕像客户端返回数据的时候,会把数据从字段指定的编码转换为character_set_results指定的编码,如果character_set_results=NULL
则不做任何转换动作,(注意这里设置为NULL不等于没有设置,没有设置的时候MySQL会继承全局设置)。 具体过程可参见图1:



图1

二、检测字符集问题的一些手段

• SHOW CHARACTER SET;

• SHOW VARIABLES LIKE 'character%’;

• SHOW VARIABLES LIKE 'collation%’;

• SQL函数HEX、LENGTH、CHAR_LENGTH

• SQL函数CHARSET、COLLATION

  使用 mysql> SHOW VARIABLES LIKE 'character%';查看,发现数据库编码均已改成utf8 

+--------------------------+---------------------------------+

  | 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 | D:"mysql-5.0.37"share"charsets" |

  +--------------------------+---------------------------------+
  (2) 还有一种修改字符集的方法,就是使用mysql的命令

mysql> SET character_set_client = utf8 ;

  mysql> SET character_set_connection = utf8 ;

  mysql> SET character_set_database = utf8 ;

  mysql> SET character_set_results = utf8 ;

  mysql> SET character_set_server = utf8 ;

  mysql> SET collation_connection = utf8 ;

  mysql> SET collation_database = utf8 ;

  mysql> SET collation_server = utf8 ;
二、
实例。
例:在Mysql执行以文本方式存储的脚本代码,用select 语句查询时发现中文全变成了乱码。
解决方法:把文本文档的存储类型设为utf-8,设置SET character_set_client = utf8 ; character_set_connection = utf8 ;
  SET character_set_results = gbk ;
再用select语句查询就可以看到中文了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: