mysql中的乱码总结之mysql5中四个设置字符集的系统变量
来源:互联网 发布:java二维码合成海报 编辑:程序博客网 时间:2024/06/06 12:57
http://www.corange.cn/archives/2008/10/2050.html
好多次更换mysql主机商时,都要造成mysql数据的乱码,因为网站开发历史经历了多个mysql版本,而且是在我刚刚学php时一点点做的,因为底层的东西很混乱,当时就没有也不知道如何处理字符串,今天决定好好的研究下它。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) > 4){//取出当前数据库的字符集$sql = 'SELECT @@character_set_database';$char = current($db->fetch_one($sql));//将客户端字符集(character_set_client)和连接字符集(character_set_connection)设置为与数据库字符集(character_set_database)一致$db->query('SET @@character_set_client = "' . $char . '"');$db->query('SET @@character_set_connection = "' . $char . '"');//将SELECT查询返回数据的字符集设置为与当前程序的字符集一致$db->query('SET @@character_set_results = "' . $program_char . '"');}?>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=?"/>一致。
- mysql中的乱码总结之mysql5中四个设置字符集的系统变量
- mysql中的乱码总结之mysql5中四个设置字符集的系统变量
- mysql中关于字符集的系统变量
- MySQL字符集乱码总结
- MySQL字符集乱码总结
- MySQL字符集乱码总结
- Mysql:关于字符集的系统变量
- centos6.3系统mysql数据库字符集设置,彻底解决乱码情况
- ubuntu中设置mysql的字符集
- ubuntu中设置mysql的字符集
- 在mysql的命令行中设置字符集
- ubuntu中设置mysql的字符集
- mysql设置utf8_unicode_ci字符集php页面输出??乱码的解决方法
- mysql设置utf8_unicode_ci字符集php页面输出??乱码的解决方法
- MySQL字符集编码设置与PHP显示乱码的解决办法
- 查看MySQL系统字符集设置
- mysql 字符集的设置
- MySQL字符集的设置
- php多重接口的实现
- 人大校长纪宝成反对高中阶段施行文理分科
- RTSP协议
- 深圳楼市低迷 “断供楼”白送都无人问津
- sevlet入门简介
- mysql中的乱码总结之mysql5中四个设置字符集的系统变量
- 深圳楼市低迷 “断供楼”白送都无人问津
- PHP 判断常量,变量和函数是否存在
- ActionError和ActionMessage有什么区别?
- RTSP协议状态机
- 用doxygen为C/C++程序自动生成文档(一)
- HTTP 请求报头详解
- 5个月耗尽35%外储 俄外储速降警示中国
- request.getAttribute()和request.getParameter()区别