zoukankan      html  css  js  c++  java
  • php mysql 编码问题

    php mysql 编码问题

    问题:

    PHP从数据库中读取数据,并echo出来,数据中文显示正常;但是echo出新定义的中文字符串,新定义的字符串会乱码。

    由此可能是数据库中提取出来的中文编码和php的输出编码不一样。

    操作:

    在head中添加<meta charset="UTF-8">,定义页面编码。

    问题:

    PHP本身输出的中文编码正确了,但是从数据库中提取出来的中文编码错了。

    由此可见,数据库提取出来的中文编码是可辨认的,在数据库中直接查询,也不会乱码。之后的乱码是因为数据库提取出来的中文编码与PHP本身输出的编码不同,选前者后者就乱码,选后者前者就乱码。

    解决方法1:

    $encode = mb_detect_encoding($sqldata, array("ASCII",'UTF-8',"GB2312","GBK"));
    if ($encode == 'EUC-CN') {
    $newsqldata = iconv('GBK', 'UTF-8', $sqldata);
    echo $newsqldata;
    echo "</br>";
    }

    查询数据库中提取中文的编码,是EUC-CN,gb2312的一种表示方式。使用iconv将GBK转换为UTF-8,则数据库提取的中文编码也是utf-8,与PHP本身输出相同,就不会乱码了

    解决方法2:

    数据库中的数据存入时是用python存入的,规定了连接方式为utf-8;在python中,所有数据也一致处理为utf-8再存入。

    本身以为这样子就OK了,但是出了这个问题后,查看MySQL编码时,发现其gkb

    所以单纯设定python连接编码、统一数据编码还不够,还需要修改数据库的编码。

    所以要根源上处理该问题,就修改数据库的编码为utf-8。

    解决方法3:

    在mysql_query前执行以下命令

    mysql_query("SET NAMES 'UTF8'");

     博大精深的问题:https://blog.csdn.net/wzwsj1986/article/details/1723658

    为了保险,还是加上吧,不管改了数据库的编码没有。

    [ 另外 ]

    MySQL ini设置编码为utf8,传入的也为utf8,但是在数据库中查询时,中文却是乱码的。

    在数据库乱码的情况下,用数据库命令行 存入数据库数据,查询出来的时候就是乱码的。

    但是命令行模式的数据库乱码,不影响存取,没关系,最可能的情况是

    1. 当前DOS窗口的编码有问题。

    2. 当前数据库session的编码有问题。

    THAT'S ALL .

  • 相关阅读:
    linux下tomcat权限的问题
    树莓派安装Tomcat服务器
    Javascript基础——Object对象和Object原型对象
    electron
    ES6-21:编程风格、ECMAScript规格
    番外篇01:angularJS最佳实战
    ES6-18:class类及其继承
    ES6-10:Promise
    ES6-09:新增API—Proxy、Reflect
    ES6-08:新增数据结构—Set、WeakSet、Map、weakMap
  • 原文地址:https://www.cnblogs.com/huim/p/8954548.html
Copyright © 2011-2022 走看看