• mysql已有数据字符集转换


    下面模拟把latin1字符集的数据转换为utf8字符集

    一、创建测试表和测试数据:

    1.修改会话级别的连接字符集

    mysql > set names latin1;

    查看一下:

     

     

    2.创建测试表:

    mysql> create database test_latin1 charset latin1;
    Query OK, 1 row affected (0.00 sec)

    mysql> use test_latin1;
    Database changed
    mysql> create table test_latin1(test varchar(20)) charset latin1;;
    Query OK, 0 rows affected (0.01 sec)

     

    3.插入测试数据:

    mysql> insert into test_latin1 values('啊'),('拨'),('吃');
    Query OK, 3 rows affected (0.00 sec)
    Records: 3  Duplicates: 0  Warnings: 0


    mysql> select * from test_latin1;
    +------+
    | test |
    +------+
    | 啊   |
    | 拨   |
    | 吃   |
    +------+
    3 rows in set (0.00 sec)

     

    4.另外打开一个终端,查询这个表,你会发现是乱码,因为默认字符集是utf8:

    mysql> select * from test_latin1;
    +---------+
    | test    |
    +---------+
    | å•Š     |
    | 拨     |
    | 僠    |
    +---------+
    3 rows in set (0.00 sec)

     

    二、开始把已有数据进行字符集转换操作

    1. 导出表结构(-d表示只导出表结构,不导出数据):

    shell > mysqldump --master-data=2 --single-transaction -R --trigger -u root -p'xxx --default-character-set=utf8 -d test_latin1 test_latin1 > test_latin1.sql

     

    2.  修改createdb.sql文件中所有的表结构定义中的lantin1为utf8

     

    3.  确保记录不再被更新,导出所有的记录(不导出建表语句,并按照原有字符集导出数据)

    shell > mysqldump --master-data=2 --single-transaction -R --trigger -u root -p'xxx' --quick --no-create-info --extended-insert --default-character-set=latin1  test_latin1 test_latin1 > data.sql

     

    4.  修改data.sql文件,将set names latin1修改为set names utf8:

     

    5.  使用新的字符集utf8创建数据库

    mysql > create database test_latin1 default charset utf8;

     

    6. 创建表

    shell > mysql -u root -p ‘xx’ test_latin1 < test_latin1.sql

     

    7. 导入数据

    shell > mysql -u root -p ‘x’ test_latin1 < data.sql

    查询建库表结构: 

     mysql> show create database test_latin1;
    +-------------+----------------------------------------------------------------------+
    | Database    | Create Database                                                      |
    +-------------+----------------------------------------------------------------------+
    | test_latin1 | CREATE DATABASE `test_latin1` /*!40100 DEFAULT CHARACTER SET utf8 */ |
    +-------------+----------------------------------------------------------------------+
    1 row in set (0.00 sec)

    mysql> show create table test_latin1;
    +-------------+-----------------------------------------------------------------------------------------------------+
    | Table       | Create Table                                                                                        |
    +-------------+-----------------------------------------------------------------------------------------------------+
    | test_latin1 | CREATE TABLE `test_latin1` (
      `test` varchar(20) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
    +-------------+-----------------------------------------------------------------------------------------------------+
    1 row in set (0.00 sec)

     

    查询数据:
    mysql> select * from test_latin1;
    +------+
    | test |
    +------+
    | 啊   |
    | 拨   |
    | 吃   |
    +------+
    3 rows in set (0.00 sec)

    注意:选择新的字符集的时候,要注意选择新的字符集最好要比原来的字符集更大,即包含原来的字符集字库,否则,可能出现新的字符集中丢失一部分数据,变成乱码,如:GBK字符集字库大于GB2312,如果把GBK改为GB2312,那么数据导入GB2312字符集的数据库中,就会丢失GB2312字符集不支持的那部分汉字数据。

  • 相关阅读:
    生成Ptc文件时候使用top camera比较好
    3delight 上关于ptex的讨论,3delight的开发者最后说ptex的内存表现并不比普通的贴图差,不知道是不是因为3delight不支持而故意说的
    闲来无事,写个算法关于11000放在含有1001个元素。。。
    寻最优数字筛选算法找出 “排列数列“ 对应的 “组合数列“
    入住博客园
    日常工作中收集整理的MSSQL 技巧
    序列化 和 反序列化 类
    对Singleton Pattern的一点修改
    快速幂 & 取余运算 讲解
    JDK动态代理实现
  • 原文地址:https://www.cnblogs.com/xiaoboluo768/p/5189399.html
Copyright © 2020-2023  润新知