设为首页 收藏本站
查看: 1184|回复: 0

[经验分享] PHP & MySQL & Apache统一编码

[复制链接]

尚未签到

发表于 2018-11-22 06:49:44 | 显示全部楼层 |阅读模式
PHP & MySQL & Apache统一编码
在用PHP与MySQL中的数据库交互的时候,老是碰到乱码问题。要么是从数据库读出的数据乱码,要么是无法存入数据库,神烦。
最初的默认编码格式是latin1的,当时就是读出的时候变乱码了( ╯□╰ ),之后把它修改为gbk的,存入的时候还是有问题。百度之,遂决定统一编码~
这里以统一utf8编码为例:
环境:MySQL5.5,Apache2.4,PHP5.6,操作系统Windows
MySQL统一编码
这两句是查看MySQL当前编码格式的语句:
SHOW VARIABLES LIKE 'character_set_%';
SHOW VARIABLES LIKE 'collation_%';外部访问数据乱码的问题就出在这个connection连接层上,解决方法是在发送查询前执行一下下面这句:
SET NAMES 'utf8';找到MySQL的my.ini文件,打开并修改:
[mysql]
default-character-set=utf8
[mysqld]
character-set-server=utf8此时,查询编码格式后已经全部是utf-8格式的编码了。当然,在 [client] 段加default-character-set=utf8 也ok。查询结果如下:
mysql> SHOW VARIABLES LIKE 'character_set_%';
+--------------------------+---------------------------------------------------------+
| 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       | C:\Program Files\MySQL\MySQL Server 5.5\share\charsets\ |
+--------------------------+---------------------------------------------------------+
8 rows in set (0.00 sec)
mysql> SHOW VARIABLES LIKE 'collation_%';
+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database   | utf8_general_ci |
| collation_server     | utf8_general_ci |
+----------------------+-----------------+
3 rows in set (0.00 sec)这样不用每次查询sql前必须加一个set names utf8;了。
PHP统一编码
在php.ini中找到并修改:
default_charset = "UTF-8"Apache统一编码
根据网上建议,在Apache的配置文件httpd.conf中,找到包含“AddLanguage”或“AddCharset”的行,在这些行最前面增加一行:
AddDefaultCharset utf-8当然,我没有在Apache2.4中找到“AddLanguage”或“AddCharset”,就直接在httpd.conf文件末尾添加了
这里再提一些找来的小建议:

  • 养成良好的习惯,在每个网页的里加入这行:

  • 把Apache中的AddDefaultCharset utf-8修改为AddDefaultCharset off,也就是关闭默认使用的字符集,这样Apache就能根据网页中的meta信息来选择使用字符集。
  • PHP输出头:header(“Content-Type: text/html; charset=utf-8"),所有文件的编码格式为utf-8。
  • 最好使用utf8 without BOM格式,至于其与utf8+BOM的区别,可以自己去搜一下~
注意:
即便统一编码之后,还是需要注意一下的,就是你的CMD是GBK的,所以从那执行sql语句时,比如说建表时,需要告诉MySQL服务器,你的客户端CMD->MYSQL CLIENT使用的是GBK码
set names gbk;
否则它一直以为你的客户端码也是UTF8码,直接将你的GBK码不转换存入数据库,就会出现错误。
SET NAMES XXX 起的功能就是告诉服务器,我的客户端是什么码。
  

  水平有限,只写到这里了,请大家务必踊跃找我麻烦~




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-637915-1-1.html 上篇帖子: 烂泥:php5.6源码安装与apache集成 下篇帖子: Apache Mina2.x网络通信框架使用入门
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表