入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

数据库读取中文乱码的问题

创建时间:2011-03-26 投稿人: 浏览次数:2222

1.当你的MySQL返回的字符串的编码格式(字符集)与你的客户工具程序(mysql, php, query browser, ...)当前使

用的字符集不同时,就会造成乱码。 比如一个英国朋友告诉你Long, 当一位中国小学生看到后就会告诉你“龙”而不是“长

”.

      2. MySQL中默认字符集的设置有四级:服务器级,数据库级,表级 。最终是字段级 的字符集设置。注意前三种均为默

认设置,并不代码你的字段最终会使用这个字符集设置。所以我们建议要用show create table table ; 或show full fields

from tableName; 来检查当前表中字段的字符集设置。
      MySQL中关于连接环境的字符集设置有  Client端,connection, results 通过这些参数,MySQL就知道你的客户端工

具用的是什么字符集,结果集应该是什么字符集。这样MySQL就会做必要的翻译,一旦这些参数有误,自然会导致字符

串在转输过程中的转换错误。基本上99%的乱码由些造成。
    也就是说你可以用show create table tablename;/show full fields from tablename; ;来检查你的当前表中字段的字符

集。可以用show variables like "char%";来检查你的服务器级,数据库级,表级的默认字符集(可以用set names “[utf

-8/gbk/...]”;);然后你必须将两种字符集设置成统一的字符集。例外,你的客户端工具的字符集也必须与前面的字符

集设置成一致,这样就不会出现中文输出乱码的问题了。

通俗的讲:也就是你必须设置一致的字符集。mysql(服务器级,数据库级,表级,字段级)和客户端工具(client,php

,results,...)的字符集必须设置成一致统一的字符集(一般是"utf-8")。字符集描叙了统一的语言,只有语言统一了,才

不会出现乱码。

我使用的是mysql+php+apache平台。php代码从数据库中读取中文数据的时候出现了乱码的问题。如下操作可以解决

问题:
(1).确定统一的字符集:show variables like "char%";看看mysql(服务器级,数据库级,表级)中默认的字符集, 

可以用set names "[utf8/gbk/....]";来修改默认字符集,(一般改为utf-8)。
(2).查看所建立的表中字段的字符集,必须在建立表之前先设置字符集是保持统一性。建立后可以用show create

table tablename;/show full fields from tablename;来查看所建立的表中字段的字符集。
 (3).客户端工具字符集的设置,必须设置于前面字符集一致,
     有两个地方需要设置
      1. 数据库连接:
       $con=mysql_connect("localhost","root","1233333") or die(mysql_error());
       mysql_query("set names utf8",$con);

      2.<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />


牢记必须设置MYSQL和客户端工具的字符集的一致性就OK了。


-----------------------------------------

找回MySQL密码

1.  停到运行的mysql:    /etc/init.d/mysql stop

2.  使用skip-grant-tables这个选项启动MySQL:  /usr/bin/mysqld_safe --skip-grant-tables &

3.  现在可以不用密码进入mysql 了。

     #  myql

    >   use mysql;

    >   UPDATE user SET password=password("123456") WHERE user="root"; //密码修改为123456;

    >  FLUSH PRIVILEGES;

    > quit;//退出mysql

4. 重启mysql :  /etc/init.d/mysql restart

现在就可以用mysql -uroot -p123456登陆了。


 

声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。