zoukankan      html  css  js  c++  java
  • mysq乱码问题

    不乱码的思想

    liunx字符集→linux客户端字符集(例如:ssh)→mysql客户端字符集→mysql服务端字符集→库的字符集→表的字符集→程序字符集统一

    mysql表跟库,库跟服务端字符集

    linux字符集设定

    vim /etc/sysconfig/i18n    #设定linux的字符集为utf-8
    LANG="zh_CN.UTF-8"
    
    . /etc/sysconfig/i18n       #全局生效

      echo $LANG
      zh_CN.UTF-8

    mysql字符集设定

    show variables like 'character_set%';    #查看mysql字符集

    ①character_ set. client |utf8       #客户端字符集,set names utf8
    ②character_ set_ .connection| utf8      #连接字符集,set names utf8 
    ③character_ set_ database|utf8     #数据库字符集,配置文件指定或建库建表指定。
    ④character. set. resplts Iutf8       #返回结果字符集,set names utf8 ;
    ⑤character_ set. server | lutf8       #服务器字符集,配置文件指定或建库建表指定。
    其中,①②④3个参数默认情况采用linux系统字符集设置,人工登录数据库执行“setnames latin1”以及mysql指定字符集登录操作,都是改变了mysql客户端的client、
    connection、results 3个参数的字符集为latin1,从而解决了插入中文乱码的问题,这个操作也可以通过更改my .cnf配置文件客户端模块的参数来实现,并且永久生效。。

    mysql客户端字符集

    改变character-set-client的字符集  (mysql客户端字符集)

    vim my.cnf
    default-character-set=utf-8      #将这条命令加入到client标签内  无需重启myslq 退出登录既生效

    客户端临时生效的命令 进入mysql

    set names utf8;      #此命令是临时改变character_ set. client(客户端字符集)  character_ set_ .connection(连接字符集)  character. set. resplts(返回结果字符集)的字符集

    mysql服务端字符集

    vim my.cnf
    default-character-set=utf8       #5.1版本以前的mysql使用      加入在mysqld标签内
    character-set-server=utf8        #5.5版本的mysql

     

    mysql表库字符集  

    建库表时,不指定字符集 默认库跟mysql 字符集  表跟库的字符集

    在创建数据库时设定 

    create database 库名 character set 'utf8' collate 'utf8_general_ci';     指定库字符集为utf8

    在创建表时设定字符集 

    create table 表名(表格式) default charset=utf8;          指定表字符集为utf8

    对于已有的数据修改字符集

    对于已有的数据库想修改字符集不能直接通过“ alter database characterset*”。或"alter table tablename characterset *,这两个命令都没有更新已有记录的字符集,而只是对新创建的表或者记录生效。。已经有记录的字符的调整,必须先将数据导出,经过修改字符集后重新导入后才可完成。。修改数据库库默认编码: 

    1导出表结构

    mysqldump -uroot -p -default-character-set =latin1 -d dbname >alltable.sql--default-character-set =utf8表示以GBK字符集进行连接  -d只导表结构

    2.把表结构改为utf8

    alltable.sql 将latin1改成utf8

    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 #按照原有字符集导出数据,这样导出的文件中,所有中文都是可见的,不会保存成乱码。

    4.在alldata.sql数据文件里吧set names latin 1修改为set names utf8

    5.建库

    create database 库名 character set 'utf8' collate 'utf8_general_ci'; 

    6.把表导回去

    mysql -uroot -p'密码' <alltable.sql

    7.把数据导回去

    mysql -uroot -p'密码' <alldata.sql
  • 相关阅读:
    7月31号
    7月29号
    性能优化、微服务、并发编程、开源框架、分布式,面试你还缺什么
    Java 异常_2
    Java 异常浅学
    Java IO浅学
    Java File文件的读写
    Java BufferedReader 控制台输入
    Java 内部类
    Java 动静态绑定
  • 原文地址:https://www.cnblogs.com/ywrj/p/9416299.html
Copyright © 2011-2022 走看看