首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > Mysql >

mysql_query("set names gb2312")设立客户端字符集

2012-11-25 
mysql_query(set names gb2312)设置客户端字符集+--------------------------+------------------------

mysql_query("set names gb2312")设置客户端字符集
+--------------------------+---------------------------------+

mysql> SHOW VARIABLES LIKE 'collation_%';
+----------------------+-----------------+
| Variable_name??????? | Value?????????? |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database?? | utf8_general_ci |
| collation_server???? | utf8_general_ci |
+----------------------+-----------------+

3.修改默认字符集
(1) 最简单的修改方法,就是修改mysql的my.ini文件中的字符集键值,
如??? default-character-set = utf8
????? character_set_server = utf8
?? 修改完后,重启mysql的服务,service mysql restart
?? 使用 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 ;


一般就算设置了表的默认字符集为utf8并且通过UTF-8编码发送查询,你会发现存入数据库的仍然是乱码

。问题就出在这个connection连接层上。解决方法是在发送查询前执行一下下面这句: SET NAMES

'utf8';
它相当于下面的三句指令:
SET character_set_client = utf8;
SET character_set_results = utf8;
SET character_set_connection = utf8;

总结:
因此,使用什么数据库版本,不管是3.x,还是4.0.x还是4.1.x,其实对我们来说不重要,重要的有二:
1) 正确的设定数据库编码.MySQL4.0以下版本的字符集总是默认ISO8859-1,MySQL4.1在安装的时候会

让你选择。如果你准备使用UTF- 8,那么在创建数据库的时候就要指定好UTF-8(创建好以后也可以改,

4.1以上版本还可以单独指定表的字符集)
2) 正确的设定数据库connection编码.设置好数据库的编码后,在连接数据库时候,应该指定.

=============================================================================

mysql5提供了以下几个设置字符集的系统变量:
character_set_client 客户端字符集
character_set_connection 客户端与服务器端连接采用的字符集
character_set_results SELECT查询返回数据的字符集
character_set_database 数据库采用的字符集
乱码问题一般是由于以上几个变量设置错误照成的,所以只要理解这几个变量,就可以与告别乱码了。
使用上述变量,要理解这个核心思想: character_set_client,character_set_connection这两个变量保证要与 character_set_database编码的一致,而 character_set_results则保证与SELECT返回的结果与程序的编码一致。
我们可以在程序中使用 set names来同时设置character_set_client, character_set_connection, character_set_results这三个系统变量。

例如 set names 'utf8' 等同于 :
set @@character_set_client = 'utf8'
set @@character_set_connection = 'utf8'set @@character_set_results = 'utf8'一般情况下,当数据库与数据库表的字符集为utf8,我们再在程序里设置set names 'utf8'命令,这样就能保证无乱码了,但是,这里还要注意character_set_results变量的值,character_set_results的字符值是用来显示返回给用户的编码的。

例如,你的数据库(character_set_database)用的是utf8的字符集,那么你就要保证character_set_client,character_set_connection也是utf8的字符集。而你的程序也许采用的并不是utf8,比如你的程序用的是gbk,那么你若把character_set_results也设置为utf8的话就会出现乱码问题。此时你应该把character_set_results设置为gbk。这样就能保证数据库返回的结果与你的程序的编码一致。以下摘自网络的一程序段:

<?
//假设我们的程序采用的是utf8的字符集
$program_char = 'utf8';
//先检查mysql的版本号,如果版本号大于4我们才可以设置这些系统变量(mysql4还没有这些系统变量)
$version = current($db->fetch_one('SELECT VERSION()'));
if (substr($version, 0, 1) &gt; 4)
{
//取出当前数据库的字符集
$sql = 'SELECT @@character_set_database';
$char = current($db-&gt;fetch_one($sql));
//将客户端字符集(character_set_client)和连接字符集(character_set_connection)设置为与数据库字符集(character_set_database)一致
$db-&gt;query('SET @@character_set_client = "' . $char . '"');
$db-&gt;query('SET @@character_set_connection = "' . $char . '"');
//将SELECT查询返回数据的字符集设置为与当前程序的字符集一致
$db-&gt;query('SET @@character_set_results = "' . $program_char . '"');
}
?&gt;


1、要保证数据库中存的数据与数据库编码一致,即数据编码与character_set_database一致;
2、要保证通讯的字符集与数据库的字符集一致,即character_set_client, character_set_connection与character_set_database一致;
3、要保证SELECT的返回与程序的编码一致,即character_set_results与程序编码一致;
4、要保证程序编码与浏览器编码一致,即程序编码与<meta http-equiv="Content-Type" content="text/html; charset=?"/>一致。来源:http://blog.sina.com.cn/s/blog_4c6583240100db6s.html================================
----------------------------------
mysql版本5 mysql库中的编码我设置成了UTF-8 PHP页面 <meta?? http-equiv= "Content-Type "?? content= "text/html;?? charset=utf-8 "?? /> PHP代码的
mysql_query( "set?? names?? 'UTF-8 ' ");?? 也设置统一了 可是,?? 显示出来的中文,韩文都是乱码,?? 为什么啊各位!!!我这么统一的编码也能乱码,?? 疯了~?? 求解!!!
分析:
(1)mysql_query( "set?? names?? 'UTF8 ' ");(2)有认说mysql_query( "set?? names?? 'utf8 ' ");?? 和mysql_query( "set?? names?? 'utf-8 ' ");?? 有区别
应该不会有什么问题了
答:
PHP codemysql_query("set names utf8");
而不是utf-8。总结:mysql_query("set name 'utf8'")这个是对的。(3)页面出现乱码,可以及从四块去分析:
???????? 数据库所用编码;
<meta http-equiv='Content-Type' content='text/html;charset=utf-8'/>;
?? php中指明下编码(set name 'utf8');?
?? 页面所用编码(可以把页面用记事本打开另存为,看一下页面所用的编码)

热点排行