转php+mysql编码的一篇文章
2008-01-16 21:50
357 查看
//标题:MySQL字符集简单讲解(个人总结)
//作者:dx_andy
//时间:2007.8.27 晚
//测试环境:win32 MySQL 5.0.45
//原因:自己的MySQL出现乱码问题
MySQL自4.1版本推出之后为我们国人带来的乱码问题也随之风弥整个互联网。主要原因就是不同字符集编码不同而产生的。
先说一下MySQl的配置中都有哪几种字符集:
MySQL 4.1的字符集支持(Character Set Support)有两个方面字符集(Character set)和排序方式(Collation)。对于字符集的支持细化到四个层次: 服务器(server),数据库(database),数据表(table)和连接(connection)。
我们可以用下面命令检查MySQL当前字符集信息:
show variables like “character_set_%”;
show variables like “collation_%”;
MySQL4.1或以上版本的系统预设的编码是UTF-8,而我们的中文编码为:GBK,GB2312,BIG5……所以当我们把中文被当做别的字符集转 化为UTF-8的字符集,再存入数据库时就会出现部分文字代码丢失而产生乱码。这就是我们查询数据库得到这些数据显示到网页上的就是“????”或乱码的 原因。
解决办法吗?当然也很简单,网页上随便一搜就能搜到。
解决办法(1)就是在插入数据之前先设置一下MySQL的字符集,即:mysql_query(“set names gbk”) 或是将gbk改为gb2312 或是别的中文字符集。然后再执行插入操作。
《特》《别》《声》《明》
上面的办法在我电脑上测试成功。
但我多少感觉有些不舒服,每次查询前都要写mysql_query(‘set name gbk’);。这一点我挺不满意的。于是我又开始搜索,结果我找到了下面将要讲到的配置方法
解决办法(2):配置my.ini文件。打开my.ini 找到 [mysql] 找到default-character-set 如果你的mysql是默认安装的话这里应该是:utf8。这时将它改为:gbk或是gb2312就行了。( 即不在查询前加入mysql_query (“set names gbk”) )
《又》《出》《问》《题》《了》
我照上面的方法改了不知多少次,从gbk改到gb2312又改到utf8始终没能成功。我想了想,既然网页传值不能成功那么在命提示符下是什么样子的呢。
于是我用命令提示符打开了MySQL。测试发现在命令提示符下操作MySQL一切正常。弄到这里我的头都大了。
我又重新配置了一下PHP环境,下载的最新AppServ 2.5.9。检查一下MySQL字符集,默认字符集是UTF8。
MySQL命令:(show variables like “character_set_%”;)
然后我在不执行(mysql_query(“set names gbk”))时向数据库执行插入,查询操作,在网页上一切都显示正常。呵呵,真是怪了!
为什么中文字却能不加转换的插入到数据库中?
又为什么中文字能不加转换的从数据库中得到正确数据?
带着这两个问题我又打开命令提示符。执行查询操作,结果显示的全是乱码(当时我想的是:文字应该为GBK编码)。于是我又执行:set names gbk; 把这个数据库字符集改为GBK字符集。再执行查询结果显示的全部是问号。这到底是怎么回事,我真的不想再研究了。
我一气之下把my.ini文件的[mysql]栏的default-character-set 注释掉了。重启MySQL后,又执行了一下操作,结果真是大出意料呀,居然正常显示了。我兴奋的不的了。结果我又查询了一下当前mysql的字符集:呵呵 居然是latin1。难道是这里在做怪?然后我用PHP插入数据,查询数据库(不执行 mysql_query(“set names gbk”)),结果照样显示正常。哈哈,问题终于找到了,原来真是这里在做怪!!!
我想看到这里大家已经应该明白了,下面我做一个小总结吧。
《最》《后》《总》《结》(只是个人见解,不负任何法律责任哦!)
(1) 在mysql5.0.45环境下,数据库把由PHP传递的数据默认为latin1 (ISO-8859-1) 字符集来处理。即把latin1转换为UTF-8,然后插入。
(2) 当PHP向MySQL数据库中插入数据前执行(mysql_query(“set names gbk”))MySQL才会以PHP查询中指定的字符集(gbk)转换为UTF-8后插入。
(3) CMD模式下操作MySQL,和用PHP操作在字符集处理上是两种概念。CMD下操作MySQL,MySQL会把CMD下的数据默认为MySQL默认的字符集转换为UTF-8后处理。而处理PHP数据MySQL会默认为 latin1 数据做处理。
《《《----我最后的配置----》》》:
因 为我只是在本地作测试,为了测试时少写一行mysql_query(“set names gbk”)。所以我把 my.ini 的 [ mysql ] 栏default-characte_set 改为 latin1。这样无论自己在本地测试或是CMD下操作MySQL都很方便。但是如果你用的是PHPMyAdmin的话,可能会显示乱码,解决办法就是安 装一个支持字符集为 latin1的PHPMyAdmin。字符集和字符集校对都为 latin1 ,就能正常显示了。
《关》《于》《数》《据》《库》《备》《份》
因为mysql4.1之前采用的中文字符集为 gbk 或 gb2312。建议备份和恢复数据库前先执行 set name gbk ;命令即可解决乱码问题。
本文来自:http://www.linuxpk.com/11861.html
//作者:dx_andy
//时间:2007.8.27 晚
//测试环境:win32 MySQL 5.0.45
//原因:自己的MySQL出现乱码问题
MySQL自4.1版本推出之后为我们国人带来的乱码问题也随之风弥整个互联网。主要原因就是不同字符集编码不同而产生的。
先说一下MySQl的配置中都有哪几种字符集:
MySQL 4.1的字符集支持(Character Set Support)有两个方面字符集(Character set)和排序方式(Collation)。对于字符集的支持细化到四个层次: 服务器(server),数据库(database),数据表(table)和连接(connection)。
我们可以用下面命令检查MySQL当前字符集信息:
show variables like “character_set_%”;
show variables like “collation_%”;
MySQL4.1或以上版本的系统预设的编码是UTF-8,而我们的中文编码为:GBK,GB2312,BIG5……所以当我们把中文被当做别的字符集转 化为UTF-8的字符集,再存入数据库时就会出现部分文字代码丢失而产生乱码。这就是我们查询数据库得到这些数据显示到网页上的就是“????”或乱码的 原因。
解决办法吗?当然也很简单,网页上随便一搜就能搜到。
解决办法(1)就是在插入数据之前先设置一下MySQL的字符集,即:mysql_query(“set names gbk”) 或是将gbk改为gb2312 或是别的中文字符集。然后再执行插入操作。
《特》《别》《声》《明》
上面的办法在我电脑上测试成功。
但我多少感觉有些不舒服,每次查询前都要写mysql_query(‘set name gbk’);。这一点我挺不满意的。于是我又开始搜索,结果我找到了下面将要讲到的配置方法
解决办法(2):配置my.ini文件。打开my.ini 找到 [mysql] 找到default-character-set 如果你的mysql是默认安装的话这里应该是:utf8。这时将它改为:gbk或是gb2312就行了。( 即不在查询前加入mysql_query (“set names gbk”) )
《又》《出》《问》《题》《了》
我照上面的方法改了不知多少次,从gbk改到gb2312又改到utf8始终没能成功。我想了想,既然网页传值不能成功那么在命提示符下是什么样子的呢。
于是我用命令提示符打开了MySQL。测试发现在命令提示符下操作MySQL一切正常。弄到这里我的头都大了。
我又重新配置了一下PHP环境,下载的最新AppServ 2.5.9。检查一下MySQL字符集,默认字符集是UTF8。
MySQL命令:(show variables like “character_set_%”;)
然后我在不执行(mysql_query(“set names gbk”))时向数据库执行插入,查询操作,在网页上一切都显示正常。呵呵,真是怪了!
为什么中文字却能不加转换的插入到数据库中?
又为什么中文字能不加转换的从数据库中得到正确数据?
带着这两个问题我又打开命令提示符。执行查询操作,结果显示的全是乱码(当时我想的是:文字应该为GBK编码)。于是我又执行:set names gbk; 把这个数据库字符集改为GBK字符集。再执行查询结果显示的全部是问号。这到底是怎么回事,我真的不想再研究了。
我一气之下把my.ini文件的[mysql]栏的default-character-set 注释掉了。重启MySQL后,又执行了一下操作,结果真是大出意料呀,居然正常显示了。我兴奋的不的了。结果我又查询了一下当前mysql的字符集:呵呵 居然是latin1。难道是这里在做怪?然后我用PHP插入数据,查询数据库(不执行 mysql_query(“set names gbk”)),结果照样显示正常。哈哈,问题终于找到了,原来真是这里在做怪!!!
我想看到这里大家已经应该明白了,下面我做一个小总结吧。
《最》《后》《总》《结》(只是个人见解,不负任何法律责任哦!)
(1) 在mysql5.0.45环境下,数据库把由PHP传递的数据默认为latin1 (ISO-8859-1) 字符集来处理。即把latin1转换为UTF-8,然后插入。
(2) 当PHP向MySQL数据库中插入数据前执行(mysql_query(“set names gbk”))MySQL才会以PHP查询中指定的字符集(gbk)转换为UTF-8后插入。
(3) CMD模式下操作MySQL,和用PHP操作在字符集处理上是两种概念。CMD下操作MySQL,MySQL会把CMD下的数据默认为MySQL默认的字符集转换为UTF-8后处理。而处理PHP数据MySQL会默认为 latin1 数据做处理。
《《《----我最后的配置----》》》:
因 为我只是在本地作测试,为了测试时少写一行mysql_query(“set names gbk”)。所以我把 my.ini 的 [ mysql ] 栏default-characte_set 改为 latin1。这样无论自己在本地测试或是CMD下操作MySQL都很方便。但是如果你用的是PHPMyAdmin的话,可能会显示乱码,解决办法就是安 装一个支持字符集为 latin1的PHPMyAdmin。字符集和字符集校对都为 latin1 ,就能正常显示了。
《关》《于》《数》《据》《库》《备》《份》
因为mysql4.1之前采用的中文字符集为 gbk 或 gb2312。建议备份和恢复数据库前先执行 set name gbk ;命令即可解决乱码问题。
本文来自:http://www.linuxpk.com/11861.html
相关文章推荐
- 关于php的一篇文章《php 应该使用缓存和连接池》
- 一致性哈希算法的一种PHP实现代码(上一篇文章)
- php字符集转码 (兼转载一篇讲解字符编码的文章)
- php ThinkPHP文章上一篇、下一篇解决方案
- 一篇文章让你认识PHP中的面向对象思想
- 为什么都要鄙视 PHP 程序员? Java联盟 百家号 07-24 21:43 前几天发表了一篇文章《图解:程序员之间是如何相互鄙视的?》,有人就在留言处留言。 可以解释下:为什么都鄙视PHP工程师
- PHP内核探索:翻译一篇HashTables文章
- php 上一篇,下一篇文章实现代码与原理说明
- php下删除一篇文章生成的多个静态页面
- 新手学习php不得不读的一篇文章
- 一篇介绍PHP集成服务器Wamp安装,使用的文章
- 非常好的一篇关于MYSQL编码问题的文章
- ubuntu 安装配置nginx和(php再下一篇文章中,因为实在受不了csdn的markdown编辑器了)
- 一篇有意思的技术文章php介绍篇
- 关于php的一篇文章《php 应该使用缓存和连接池》
- ubuntu 安装配置nginx(上一篇文章中)和php
- 新手学习php不得不读的一篇文章
- yourphp文章上一篇下一篇代码分享
- php ThinkPHP文章上一篇、下一篇解决方案
- php编码处理的文章一篇