• 03_MySQL中文乱码处理_02_确保MySQL插入数据不乱码的解决方法


    【要统一MySQL数据库客户端 和 服务端的字符集】

    如下,就是不统一的情况:

    通常,MySQL数据库的下面几个字符集(客户端 和 服务端)统一成一个字符集(即" show variables like 'character_set%'; "结果中的字符集设置尽量一致),才能保证插入的中文数据可以正确输出。(Linux系统的字符集也要尽量和数据库的字符集统一)。

    【1.更改客户端的字符集编码】

    其中①②④三个参数默认情况采用Linux系统字符集设置,人工登录数据库执行"set names latin1"以及mysql指定字符集登录操作,或者登陆MySQL时输入"  mysql -uroot -p --default-character-set=lantin1 ",这两种都只是临时改变了MySQL客户端的client、connection、results这3个参数的字符集为Latin1,从而解决了插入中文乱码的问题,这个操作也可以通过更改my.cnf配置文件中客户端模块的参数来实现,后者永久生效。

    在my.cnf中更改如下所示:

    [client]

    default-character-set = XXXX

    【2.更改服务端的字符集编码】

    在my.cnf配置文件中,修改如下所示:

    *5.1以及之前版本*

    [mysqld]

    default-character-set=utf8

    *5.5版本*

    [mysqld]

    character-set-server=utf8

     修改完毕之后要重启MySQL才会生效。

    【3.Linux系统服务端修改为对应的字符集】

    [root@YH~] # cat /etc/sysconfig/i18n

    #LANG="zh_CN.GB2312"

    LANG="zh_CN.utf8"

    [root@YH bbs] # . /etc/sysconfig/i18n

    【4.数据库数据表的编码】 

    除了上述的,还需要查看一下对应的数据库,数据表的字符集编码,要保证这些编码也要一致:

    数据表user

    数据库test

       注意:对于已有的数据库或者数据表,若想修改字符集不能通过"alter database character set *** "或者" alter table tableName character set *"这两个命令都不能更新已存在的记录的字符集,而只是对新创建的表或者记录有效。

    对于已经存在的记录的字符的调整,必须先将数据导出,经过修改字符集后重新导入后才可完成。

    修改数据库的默认编码:

    alter database dbName character utf8;

        下面模拟Linux系统下将Latin1 字符集的数据库修改成 GBK字符集的实际过程:

    1.先导出表结构(没有导数据)

    mysqldump -uroot -p --default-character-set=latin1 -d dbName>altertable.sql

    解释:--default-character-set=latin1 :表示以latin1 字符集进行连接,

       -d:表示只导出表结构

    2.编辑altertable.sql,将Latin1改为GBK

    3.确保数据不再更新,导出所有的数据

    mysqldump -uroot -p --quick --no-create-info  --extended-insert  --default-character-set=latin1 dbName>alldata.sql

    参数说明:--quick:用于转存储大的表,强制mysqldump从服务器一次一行的检索数据不是检索所有行,并输出前CACHE到内存中。

               --no-create-info:不创建CREATE TABLE语句

               --extended-insert:使用包括几个VALUES列表的多行INSERT语法,这样文件更小,IO也小,导入数据会非常快。

         --default-character-set=latin1:要按照原来的latin1字符集导出所有数据,这样导出的文件中,所有中文都是可见的,不会保存成乱码。

    4.打开alldata.sql,将set names latin1 修改成 set names gbk;(或者修改系统的服务端或者客户端)

    5.建库 create database dbNewName default charset gbk;

    6.创建表,执行alltable.sql

    mysql -uroot -p dbName < altable.sql

    7.导入数据

    mysql -uroot -p dbName < alldata.sql

    ---------导出导入小结(以latin1-->utf8为例)--------

      1.建库及建表的结构语句导出,set批量修改为utf8

      2.导出所有的数据

      3.修改mysql服务端和客户端编码为utf8

      4.删除所有的库和数据

      5.导入新的建库及建表语句

      6.导入mysql的所有数据

    【5.自己程序代码设置的编码也要一致】

  • 相关阅读:
    【MySQL】JavaWeb项目中配置数据库的连接池
    【Java】Struts2配置默认Action和配置Action的默认处理类
    【Java】Struts2中使用ServletAPI
    【JavaScript】JS对象-属性的遍历,删除对象属性
    nginx 的三种虚拟主机配置方法
    nginx官方源安装-主配置文件详解
    http协议工作原理及工作流程
    ssh安全优化免密登陆
    sersync 实时同步网站数据
    nfs 共享存储
  • 原文地址:https://www.cnblogs.com/HigginCui/p/5787612.html
Copyright © 2020-2023  润新知