mysql表统一编码_PHP MySQL Apache统一编码

 2023-09-07 阅读 24 评论 0

摘要:PHP & MySQL & Apache统一编码在用PHP与MySQL中的数据库交互的时候,老是碰到乱码问题。要么是从数据库读出的数据乱码,要么是无法存入数据库,神烦。php sqlserver,最初的默认编码格式是latin1的,当时就是读出的时候变乱码了( ╯□╰ )&#

PHP & MySQL & Apache统一编码

在用PHP与MySQL中的数据库交互的时候,老是碰到乱码问题。要么是从数据库读出的数据乱码,要么是无法存入数据库,神烦。

php sqlserver,最初的默认编码格式是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 起的功能就是告诉服务器,我的客户端是什么码。

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

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/4/16215.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息