数据库读取中文乱码的问题
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登陆了。
- 上一篇: php session_set_save_handler 函数的用法(mysql)
- 下一篇:没有了