zoukankan      html  css  js  c++  java
  • 项目--解决MySQL数据库插入中文乱码

    转载自:http://blog.csdn.net/zzh920625/article/details/51226312

    情景再现】

             如图,在项目中使用MySQL数据库,在做插入操作时,写入英文字符没有问题,但是插入中文的时候数据库中的数据就像是这样:

    解决办法】

         (1)无奈之余,跟了一遍代码,本以为是在js方法向Controller传值中引起了类似于”TypeError”的错误,发现跟到了Server端D层数据库访问操作都没有发现有数据传递错误,So,学习新知识的机会又到了。

         (2)网上的资料显示,连接mysql库出现中文乱码的问题原因有如下几个:

                1.mysql本身设定问题,例如还停留在latin1版本;

                2.table的语系设定问题(包含character与collation);

                3.客户端程式(例如PHP,Java)的连线语系设定问题;

           对于mysql本身设定的问题,如果是数据库版本过低导致插入中文失败,只需要到官网去升级就ok,毕竟mysql是免费的。

           而更多的原因则是:选用的编码不对或者编码不一致造成的。对于mysql数据库和程序代码的编码方式的设定,下面详细分析:

    【具体策略】

           如上所述,解决中文乱码的问题:

           首先明确MySQL的默认编码是Latin1,不支持中文,要支持中午需要把数据库的默认编码修改为gbk或者utf8。

     

           一、数据库端编码设置

           1、需要以root用户身份登陆才可以查看数据库编码方式(以root用户身份登陆的命令为:>mysql -uroot –p,之后两次输入root用户的密码),查看数据库的编码方式命令为:

    >show variables like 'character%';

    +--------------------------+----------------------------+

    | Variable_name | Value |

    +--------------------------+----------------------------+

    | character_set_client | latin1 |

    | character_set_connection | latin1 |

    | character_set_database |latin1 |

    | character_set_filesystem | binary |

    | character_set_results |latin1 |

    | character_set_server | latin1 |

    | character_set_system |utf8 |

    | character_sets_dir | /usr/share/mysql/charsets/ |

    +--------------------------+----------------------------+

              从以上信息可知数据库的编码为latin1,需要修改为gbk或者是utf8(先以utf8为例);

              其中,character_set_client为客户端编码方式;

    character_set_connection为建立连接使用的编码;

    character_set_database数据库的编码;

    character_set_results结果集的编码;

    character_set_server数据库服务器的编码;

              现将这几种编码方式全部改为”utf-8”:

              本文仅仅介绍一种最根本的方法:

    (1)中止MySQL服务

    (2)在MySQL的安装目录下找到my.ini,如果没有就把my-medium.ini复制为一个my.ini即可

    (3)打开my.ini以后,在[client]和[mysqld]下面均加上default-character-set=utf8,保存并关闭

    (4)启动MySQL服务并查询此时编码方式:

    mysql> show variables like 'character%'; #执行编码显示

    +--------------------------+----------------------------+

    | 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 | /usr/share/mysql/charsets/ |

              当这八种编码方式编程utf-8的时候,此时mysql数据库即可插入中文

     

           二、程序端编码设置

            如果仅仅是做了以上的操作,直接向数据库中写入中文没有问题,但是从程序向数据库写入中文可能还会有问题,经过我上午的实验,总结如下:

          (1)可能是在HTML页面中规定了程序的编码方式,此时修改为”utf-8”即可。

                   <%@ page language=”C#” contentType=”text/html; charset=gbk”%>

          (2)Server端配置文件链接数据库端:

                   <server=192.168.22.***;userid=root;password=123;Charset=utf8;database=>

                   加入charset的格式”utf-8”即可。如果没有Charset的字段,手动添加即可。

           最好的方法就是整个解决方案里搜索”Charset”,将其他编码方式都统一为utf-8,因为要支持中午需要把数据库的默认编码修改为gbk或者utf8。

           总结两点:1、Mysql编码方式设置为支持中文的utf8或者gbk; 2、程序的编码方式设置成与数据库同步的utf8或者gbk。

           至此,该问题解决完毕,

     

  • 相关阅读:
    Git学习(一)——熟悉git操作流程
    DRF+Vue项目(一)——项目架构
    DRF框架(九)——drf偏移分页组件、drf游标分页组件(了解)、自定义过滤器、过滤器插件django-filter
    DRF框架(八)——drf-jwt手动签发与校验、搜索过滤组件、排序过滤组件、基础分页组件
    DRF框架(七) ——三大认证组件之频率组件、jwt认证
    DRF框架(六)——三大认证组件之认证组件、权限组件
    数据类型
    表操作
    库操作
    MySQL服务管理
  • 原文地址:https://www.cnblogs.com/yangwujun/p/6907232.html
Copyright © 2011-2022 走看看