zoukankan      html  css  js  c++  java
  • MySQL生僻字(不常用字)的完整解决方案

    查看 MySQL 数据库服务器和数据库字符集

    show variables like '%char%';

    查看 MySQL 数据表(table) 的字符集

    show table status from sqlstudy_db like '%countries%';

    查看 MySQL 数据列(column)的字符集

    show full columns from countries;

    查看当前安装的 MySQL 所支持的字符集

    show charset;

    show char set;
     

    MySQL的字符编码设置可以划分为三个层次,依据具体情况可以在数据库、数据表和字段三个级别进行实验:

    SET utf8 COLLATE utf8_general_ci

    SET gbk COLLATE gbk_chinese_ci

    1、MySQL数据库字符编码全局设置;

    语句:ALTER DATABASE `数据库名` DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci

    2、MySQL数据表字符编码设置;

    语句:ALTER TABLE `表名` DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci

    3、MySQL数据表字段字符编码设置;

    语句:ALTER TABLE `表名` CHANGE `字段名` `字段名` 字段类型(长度) CHARACTER SET gbk COLLATE gbk_chinese_ci NULL DEFAULT NULL

    注意:请在执行查询之前,执行:SET NAMES gbk

    //////////////////////////////////////////////////////////////////////

    第一次采用MySQL作为业务应用的数据库,由于经验不够丰富,在安装数据库的时候选择了GB2312编码。

    起先用的也算得心应手,然而后续发现了生僻字不能显示的情况,把我搞得焦头烂额。经过好几天的摸索、

    学习,终于把问题解决了。记下解决步骤,与跟我一样的新手分享。

    步骤一: 分析出现乱码的原因

    由于GB2312字符集只收录了6763个汉字,导致一些生僻字无法正常显示。

    步骤二:确定解决方法

    把字符集由GB2312改成GBK。但是由于不能丢弃之前的数据,如何修改MySQL的字符集成了关键。

    步骤三:字符集的修改

    a. 先导出表结构

    mysqldump -u root -p --default-character-set=gbk -d 数据库名 > createdb.sql

    其中参数-d表示只导出表结构,不导出数据。

    b. 打开createdb.sql,手工把gb2312替换成gbk。

    c. 导出所有记录

    mysqldump -u root -p --quick --no-create-info --extended-insert --default-character-set=gb2312 数据库名 > data.sql

    其中参数--no-create-info表示不生成建表语句;--default-character-set=gb2312表示按照原来字符集导出所有数据。

    d. 打开data.sql,手工把SET NAME gb2312改成SET NAME gbk。

    注意:如果data.sql很大,可能需要找一些替换工具来完成替换操作,否则可以直接用UltraEdit之类的编辑工具打开修改。

    e. 在新的服务器上创建表,执行createdb.sql。

    mysql -u root -p 数据库名 < createdb.sql

    f. 导入数据,执行data.sql

    mysql -u root -p 数据库名 < data.sql

    g. 创建数据库用户。

    到这儿已经完成了数据库字符集从gb2312到gbk的修改,接下去可以登录数据库,手工把显示为"?"的乱码字重新更新一下。

    看看是不是大功告成了!

     ///////////////////////////////////////////////////////////

    这几天查找了很多关于mysql对中文字符编码的处理,读了各种零散的文章,最后做了全面的总结,现和大家分享:

    字符编码

    MySQL字符编码 GBK、GB2312、UTF8区别:http://kongjian.baidu.com/wangzhe1945/blog/item/4a69226d4a095cf0421694e1.html
    1.系统编码
    >show variables like '%character%';  
                mysql> show variables like '%collation%';
    改变系统编码:修改my.cnf(/etc/my.cnf)中默认的编码选项[mysqld]下添加default-charcter-set=utf8  mysql 5.5以上版本换成了character-set-server=utf8 重新启动mysql
       命令形式   mysql> SET NAMES 'utf8'; 重新启动mysql的时候所有的设置将失效

    2.数据库编码
    查看数据库编码: mysql> show create database db_name;
    修改数据库编码: mysql> ALTER DATABASE db_name ####这里修改整个数据库的编码
                   CHARACTER SET utf8
                        DEFAULT CHARACTER SET utf8
                        COLLATE utf8_general_ci
                        DEFAULT COLLATE utf8_general_ci;
    在在建数据库的时候指定编码:
            mysql> CREATE DATABASE db_name
                   CHARACTER SET utf8
                   DEFAULT CHARACTER SET utf8
                   COLLATE utf8_general_ci
                   DEFAULT COLLATE utf8_general_ci ;
    3.数据库表和字段编码

    查看数据库表和字段编码: mysql> show create table table_name;
    >ALTER TABLE table_name DEFAULT CHARACTER SET utf8; 
    修改字段编码: mysql> ALTER TABLE `table_name` CHANGE `dd` `dd` VARCHAR( 45 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL             该命令就是将MYSQL数据库table_name表中 dd的字段编码改为utf8

    4.命令行下插入汉字时指定编码:mysql> set names utf8;   有时候这一句很关键!
                    mysql> insert into test(name) values('王东伟');

    总之,不管采用那一种编码方式,只要做到完全统一将能达到相应的效果。

  • 相关阅读:
    P4675 [BalticOI 2016 day1]Park 题解
    AT4432 [ARC103B] Robot Arms 题解
    P4357 [CQOI2016]K 远点对 题解
    P2163 [SHOI2007]园丁的烦恼 题解
    P3157 [CQOI2011]动态逆序对 题解
    bzoj 1568. [JSOI2008]Blue Mary开公司
    P3120 [USACO15FEB]Cow Hopscotch G 题解
    CSP-S 2021 题解
    Maven简介与安装
    java 基本程序设计结构 一
  • 原文地址:https://www.cnblogs.com/hssbsw/p/3418426.html
Copyright © 2011-2022 走看看