记录记录PHP post提交表单导入mysql中文乱码的问题

关于乱码,这是个糟糕的问题!涉及到很多地方

解决思路:程序所涉及的环境字符集不一致导致

  1. mysql出现乱码一般是mysql数据库内部的字符集出现问题

    为了防止出现一些后续的问题

    在建库的时候就要设置默认字符集

    CREATE DATABASE 库名 DEFAULT CHARSET=UTF8;
    

    其他的一些操作

    查看mysql各个地方的字符集设置情况

    SHOW VARIABLES LIKE 'character%';
    
  • 顺便记录一下mysql数据库 各个字符集的作用

    记录PHP post提交表单导入mysql中文乱码的问题-LMLPHP

  1. character_set_client

    解析客户端sql语句的字符集

  2. character_set_connection

    通常与character_set_client保持一致,当进入查询时,会将sql语句 由character_set_client转变为 character_set_connection字符集

  3. character_set_database

    新建数据库的默认字符集,通常建库的时候就指定一下默认的字符集

    默认数据库的字符集决定了新建表的默认字符集

    默认表的字符集又决定了字段的默认字符集

    换句话说,如果我们建库指定了默认字符集,建表的时候就不用去指定默认字符集了

    如果建表,建库都不指定默认字符集,默认就会用character_set_database初始的字符集去建表,

    而通常情况下,初始的character_set_database字符集是西欧的字符集,对英文友好,对中文不友好!

  4. character_set_filesystem

    文件系统字符集编码,主要用于解析文件名称的字符串字面值(默认就好)

  5. character_set_results

    返回给客户端的查询结果或者错误提示的字符集

  6. character_set_server

    服务器端的默认编码字符集

  7. character_set_system

    mysqlsever储存元数据的编码字符集(默认就好)

  8. character_set_dir

    mysql字符集编码储存的文件夹

    如果需要改动某个字符集,可以用以下类似的语句

    SET character_set_server = utf8;
    

    如果以上都改了,还是出现问题,那说明mysql内部的字符集是没有问题的,剩下的应该就是外部环境的字符集的问题

    记录PHP post提交表单导入mysql中文乱码的问题-LMLPHP

  9. 网上找了很久,发现可能是操作系统字符集的问题

    打开cmd 输入 chcp 查看活动代码页

    记录PHP post提交表单导入mysql中文乱码的问题-LMLPHP

    win10默认用的GBK字符集,修改字符集为 UTF-8

    记录PHP post提交表单导入mysql中文乱码的问题-LMLPHP

修改重启后,查看字符活动代码页

记录PHP post提交表单导入mysql中文乱码的问题-LMLPHP

这时候再次POST提交表单,导入数据库中文就可以正常显示了!

03-07 09:54