zoukankan      html  css  js  c++  java
  • latin1字符集的数据转换为utf8字符集

    下面模拟把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字符集不支持的那部分汉字数据。

  • 相关阅读:
    Redis Java API
    怎样测试TCP&UDP端口
    [转]太阳致敬式瑜伽
    [转]你所不知道的超级瘦腿运动——空中蹬自行车
    Oracle 存储过程学习
    hive Java API
    [转]骨盆操
    [转]HDFS客户端的权限错误:Permission denied
    【转】拇指拇外翻的纠正训练
    [转]shell 变量替换
  • 原文地址:https://www.cnblogs.com/liang545621/p/12606600.html
Copyright © 2011-2022 走看看