您的位置:新葡亰496net > 网络数据库 > MySQL字符集转换,MySQL字符集设置及字符转换

MySQL字符集转换,MySQL字符集设置及字符转换

发布时间:2019-11-15 13:01编辑:网络数据库浏览(56)

    环境:

     MySQL字符集设置及字符调换(latin1转utf8卡塔 尔(英语:State of Qatar)

     MySQL字符集设置及字符转变(latin1转utf8卡塔尔 2012-09-11 14:17:36

    分类: Mysql/postgreSQL

     

    在变幻无常情状中,会平日遇到Mysql字符的安装难题,CU超级多牛人都说过N次了,个人也总计下。

    假如在运用起来阶段未有科学的装置字符集,在运维大器晚成段时间今后才开采成在不能够满足必要须要调动,那么就需求实行字符集的改换。字符集的改造不可能直接通过alter dataabase character set ***; 或者 alter table tablename character set ***; 命令举行,那四个指令都尚未修改原来就有记录的字符集,而只是对新创造的表大概记录生效。

    在小编的数据库最为常用的是latin1、utf8,由于项目标结缘,字符的渴求也起先正儿八经,统风流浪漫为utf8,那么就供给把在此以前的latin1字符转变来才utf8格式,那样才不会产出乱码的气象。已某些记录的字符集调解,要求先将数据导出,经过特其余调解重新导入后才可成功。

    以下模拟的是将latin1字符集的数据库修改成GBK字符集的数据库的经过。操作较为轻巧,只要花的时日是在导入和导出数据。下边就来简单的介绍Mysql字符变量和latin1调换成utf8的进程,大家能够依赖自个儿实在意况,触类旁通。

    风流倜傥、MySQL字符集设置

    • 系统变量:

    – character_set_server:暗中同意的内部操作字符集

    – character_set_client:顾客带来源数据运用的字符集

    – character_set_connection:连接层字符集

    – character_set_results:查询结果字符集

    – character_set_database:当前入选数据库的默许字符集

    – character_set_system:系统元数据(字段名等)字符集

    – 还有以collation_开班的同地点对应的变量,用来汇报字符序。

    • 用introducer钦赐文本字符串的字符集:

    – 格式为:[_charset] ‘string’ [COLLATE collation]

    MySQL字符集转换,MySQL字符集设置及字符转换。– 例如:

    • SELECT _latin1 ‘string’;

    • SELECT _utf8 ‘你好’ COLLATE utf8_general_ci;

    –由introducer修饰的文本字符串在伸手进程中不通过多余的转码,直接调换为个中字符集管理。

    二、MySQL中的字符集转换进程

    1. MySQL Server收下乞请时将诉求数据从character_set_client转换为character_set_connection;

    2. 开展之中操作前将呼吁数据从character_set_connection转换为当中操作字符集,其规定方法如下:

    • 使用各类数据字段的CHARACTE奥迪Q3 SET设定值;

    • 若上述值荒诞不经,则使用相应数据表的DEFAULT CHARACTEEnclave SET设定值(MySQL扩大,非SQL标准);

    • 若上述值空中楼阁,则动用相应数据库的DEFAULT CHARACTEWrangler SET设定值;

    • 若上述值官样文章,则应用character_set_server设定值。

    3. 将操作结果从内部操作字符集调换为character_set_results。

     

    三、latin1转换到utf8

    以本来的字符集为latin1为例,进级产生utf8的字符集。原本的表: databasename (default charset=latin1),新表:new_databasename(default charset=utf8)。

     

    1. mysql> show create database databasename; 

    2. -------------- -------------------------------------------------------------------------

    3. | Database | Create Database |
    4. -------------- -------------------------------------------------------------------------
    5. | databasename | CREATE DATABASE `databasename` /*!40100 DEFAULT CHARACTER SET latin1 */ | 
    6. -------------- -------------------------------------------------------------------------
    7. 1 row in set (0.00 sec)

     

    1> 导出表结构:

     

    1. mysqldump -uroot -p --default-character-set=utf8 -d databasename > createtab.sql

     

     

    个中--default-character-set=utf8 表示设置以什么字符集连接, -d 表示只导出表结构,不导出多少。

    2>改良 createtab.sql 中表结构定义中的字符集为新的字符集。

     

    1. sed -i s/CHARSET=latin1/CHARSET=utf8/g `grep -rl "CHARSET=latin1" createtab.sql `

     

    3>确认保证记录不再更新,导出全体记录。

     

    1. mysqldump -uroot -p --no-create-info databasename > data.sql

     

    可选参数:

    --quick: 该接纳用于转储大的表。 它强制 mysqldump 从服务器贰次生龙活虎行地查找表中的行实际不是 检索全体行,并在出口前将它缓存到内部存储器中。

    --extended-insert: 使用蕴涵多少个 values 列表的多行insert语法,那样使转储文件越来越小,重载文件时得以加速插入。

    --no-create-info: 不写重新成立各样转储表的create table 语句。

    --default-character-set=latin1: 根据原有的字符集导出全部数据,那样导出的文本中,全部粤语都是可以知道的,不会保留成乱码。不加多该参数以暗许字符导出。

    4>打开data.sql,将 set names latin1 修改成 set names utf8 。

     

    1. sed -i s/CHARSET=latin1/CHARSET=utf8/g `grep -rl "CHARSET=latin1" data.sql `

     

     

    (PS:sed工效是超级高的,在测量检验中60G的数额4分钟就转变完成了卡塔 尔(阿拉伯语:قطر‎

     

    5>使用新的字符集创设新的数据库。

     

    1. create database new_databasename default charset utf8;

     

    6>创建表,执行 createtab.sql

     

    1. mysql -uroot -p new_databasename < createtab.sql

     

    7>导入数据,施行data.sql

     

    1. mysql -uroot -p new_databasename < data.sql

    8、查看新数据库的字符消息

     

    1. mysql> show create database new_databasename;

      1. ------------------ -----------------------------------------------------------------------------
      1. | Database | Create Database |
      1. ------------------ -----------------------------------------------------------------------------
      1. | new_databasename | CREATE DATABASE `new_databasename` /*!40100 DEFAULT CHARACTER SET utf8 */ | 
      1. ------------------ -----------------------------------------------------------------------------
      1. 1 row in set (0.00 sec)
      1. mysql> show create table type; 
      1. ------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
      1. | Table | Create Table |
      1. ------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
      1. | type | CREATE TABLE `type` (
      1.   `id` int(10) NOT NULL AUTO_INCREMENT,
      1.   `Name` varchar(100) CHARACTER SET gb2312 NOT NULL,
      1.   PRIMARY KEY (`id`)
      1. ) ENGINE=MyISAM AUTO_INCREMENT=17 DEFAULT CHARSET=utf8 | 
      1. ------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
      1. 1 row in set (0.00 sec)

    注意:选拔字符集的时候,要留神最棒是源字符的超集,也许规定比源字符集的字库更加大。

    改革mysql的字符集和暗中同意存款和储蓄引擎

    MySQL:5.1.73

     

     

    1.改变mysql的字符集

    1、创建数据库(不钦点字符集卡塔 尔(英语:State of Qatar)

    mysql库现成字符集

    暗许的字符集为latin1。

    mysql> show variables like 'character%';

     

    -------------------------- ----------------------------

    2、在数据库中新建表并插入数据,模拟一个业已接受了风度翩翩段时间的库

    | Variable_name            | Value                      |

    mysql> use charset;

    -------------------------- ----------------------------

    mysql> create table t1(name varchar(10), age int(2));

    | character_set_client     | latin1                     | 

    MySQL字符集转换,MySQL字符集设置及字符转换。mysql> insert into t1 values('yang',25);

    | character_set_connection | latin1                     | 

     

    | character_set_database   | latin1                     | 

    3、导出数据,构思切换字符集

    | character_set_filesystem | binary                     | 

    图片 1

    | character_set_results    | latin1                     | 

     

    | character_set_server     | latin1                     | 

    翻开sql文件里的源委:

    | character_set_system     | utf8                       | 

     

    | character_sets_dir       | /usr/share/mysql/charsets/ | 

    4. 更动charset.sql文件中的"CHAENCORESET=latin1"标识

    -------------------------- ----------------------------

    # sed -i s/CHARSET=latin1/CHARSET=utf8/g charset.sql

    8 rows in set (0.00 sec)  www.2cto.com  

     

    mysql>

    5.将改进后的charset.sql应用到新的数据库中

    mysql的字符集分为几类

    mysql> create database new_charset default charset utf8;

    A.客户端字符集:通过系统变量”character_set_client“表示,通告server端,客商端提交的sql语句编码格式

    mysql> use new_charset;

    B.连接字符集:通过系统变量”character_set_connectiont“表示,server端翻译sql语句时,使用的编码格式

    mysql> source charset.sql;

    C.结果集字符集:通过系统变量”character_set_results“表示,server端重临结果集以前把结果集转变来的编码格式

     

    D.存款和储蓄字符集:通过系统变量”character_set_results“和“character_set_server”表示,是数据在仓库储存引擎里编码格式

    6.现行反革命大家的新库new_charset和原表t1都是utf8字符集了。

     

     

    为了不出新乱码,大家须要联合修正那么些参数,比方自个儿要把数据库的暗中认可字符集改为utf8,如下所示

    在[client]下加多如下参数

    default-character-set=utf8

    在[mysqld]下增添如下参数

    default-character-set=utf8

    接下来重启mysql服务,再查看字符集(要重复登入顾客端卡塔尔国

      www.2cto.com  

    mysql> show variables like 'character%';

    -------------------------- ----------------------------

    | Variable_name            | Value                      |

    -------------------------- ----------------------------

    | character_set_client     | utf8                       | 

    | character_set_connection | utf8                       | 

    | character_set_database   | utf8                       | 

    | character_set_filesystem | binary                     | 

    | character_set_results    | utf8                       | 

    | character_set_server     | utf8                       | 

    | character_set_system     | utf8                       | 

    | character_sets_dir       | /usr/share/mysql/charsets/ | 

    -------------------------- ----------------------------

    8 rows in set (0.01 sec)

    mysql>

    mysql> show variables like 'collation%';

    ---------------------- -----------------

    | Variable_name        | Value           |

    ---------------------- -----------------

    | collation_connection | utf8_general_ci | 

    | collation_database   | utf8_general_ci | 

    | collation_server     | utf8_general_ci | 

    ---------------------- -----------------

    3 rows in set (0.00 sec)

    mysql>

    mysql的字符集分的可比细,能够应用暗中认可值,也足以钦定值

     

    A.数据库字符集

    动用暗许字符集的库

    mysql> create database db1;

    Query OK, 1 row affected (0.01 sec)

     

    mysql> show create database db1;

    ---------- --------------------------------------------------------------

    | Database | Create Database                                              |

    ---------- --------------------------------------------------------------

    | db1      | CREATE DATABASE `db1` /*!40100 DEFAULT CHARACTER SET utf8 */ | 

    ---------- --------------------------------------------------------------

    1 row in set (0.00 sec)

    点名字符集的库

    mysql> create database db2 default character set latin1;

    Query OK, 1 row affected (0.01 sec)

    mysql> show create database db2;

    ---------- ----------------------------------------------------------------

    | Database | Create Database                                                |

    ---------- ----------------------------------------------------------------

    | db2      | CREATE DATABASE `db2` /*!40100 DEFAULT CHARACTER SET latin1 */ | 

    ---------- ----------------------------------------------------------------

    1 row in set (0.00 sec)

     

    更正库的字符集

    mysql> alter database db2 default character set utf8;

    Query OK, 1 row affected (0.00 sec)

    mysql> show create database db2;

    ---------- --------------------------------------------------------------

    | Database | Create Database      www.2cto.com                                            |

    ---------- --------------------------------------------------------------

    | db2      | CREATE DATABASE `db2` /*!40100 DEFAULT CHARACTER SET utf8 */ | 

    ---------- --------------------------------------------------------------

    1 row in set (0.00 sec)

     

    B.表字符集

    mysql> use db2;

    Database changed

     

    运用默许库字符集的表

    mysql> create table t1(a varchar(10));

    Query OK, 0 rows affected (0.01 sec)

    mysql> show create table t1;

    ------- -----------------------------------------------------------------------------------------

    | Table | Create Table                                                                            |

    ------- -----------------------------------------------------------------------------------------

    | t1    | CREATE TABLE `t1` (

      `a` varchar(10) default NULL

    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 | 

    ------- -----------------------------------------------------------------------------------------

    1 row in set (0.00 sec)

     

    创设内定字符集的表

    mysql> create table t2(a varchar(10)) default character set latin1;;

    Query OK, 0 rows affected (0.01 sec)

    ERROR: 

    No query specified

    mysql> show create table t2;

    ------- -------------------------------------------------------------------------------------------

    | Table | Create Table                                                                              |

    ------- -------------------------------------------------------------------------------------------

    | t2    | CREATE TABLE `t2` (

      `a` varchar(10) default NULL

    ) ENGINE=InnoDB DEFAULT CHARSET=latin1 | 

    ------- -------------------------------------------------------------------------------------------

    1 row in set (0.00 sec)

     

    更正表的字符集

    mysql> alter table t2 default character set utf8;

    Query OK, 0 rows affected (0.01 sec)

    Records: 0  Duplicates: 0  Warnings: 0

    mysql> show create table t2;

    ------- --------------------------------------------------------------------------------------------------------------

    | Table | Create Table     www.2cto.com                                                                                                |

    ------- --------------------------------------------------------------------------------------------------------------

    | t2    | CREATE TABLE `t2` (

      `a` varchar(10) character set latin1 default NULL

    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 | 

    ------- --------------------------------------------------------------------------------------------------------------

    1 row in set (0.00 sec)

    mysql>

    从地点能够看到,订正表的字符集时,不会影响已经存在列的字符集,但新增加列将世襲表的字符集,如下

    mysql> alter table t2 add a2 varchar(10);

    Query OK, 0 rows affected (0.01 sec)

    Records: 0  Duplicates: 0  Warnings: 0

    mysql> show create table t2;

    ------- -----------------------------------------------------------------------------------------------------------------------------------------------

    | Table | Create Table                                                                                                                                  |

    ------- -----------------------------------------------------------------------------------------------------------------------------------------------

    | t2    | CREATE TABLE `t2` (

      `a` varchar(10) character set latin1 default NULL,

      `a2` varchar(10) default NULL

    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 | 

    ------- -----------------------------------------------------------------------------------------------------------------------------------------------

    1 row in set (0.01 sec)

    mysql>

     

    若果想改变已经存在表和字符列的字符集,要用如下

    mysql> alter table t2 convert to character set latin1;

    Query OK, 0 rows affected (0.01 sec)

    Records: 0  Duplicates: 0  Warnings: 0

    mysql> show create table t2;

    ------- ----------------------------------------------------------------------------------------------------------------------------

    | Table | Create Table                                                                                                               |

    ------- ----------------------------------------------------------------------------------------------------------------------------

    | t2    | CREATE TABLE `t2` (

      `a` varchar(10) default NULL,

      `a2` varchar(10) default NULL

    ) ENGINE=InnoDB DEFAULT CHARSET=latin1 | 

    ------- ----------------------------------------------------------------------------------------------------------------------------

    1 row in set (0.01 sec)

     

    C.字段字符集

     

    行使私下认可和钦定字符集制造的列

    mysql> create table t3 (a1 varchar(10),a2 varchar(10) character set latin1);

    Query OK, 0 rows affected (0.04 sec)  www.2cto.com  

    mysql> show create table t3;

    ------- ------------------------------------------------------------------------------------------------------------------------------------------------

    | Table | Create Table                                                                                                                                   |

    ------- ------------------------------------------------------------------------------------------------------------------------------------------------

    | t3    | CREATE TABLE `t3` (

      `a1` varchar(10) default NULL,

      `a2` varchar(10) character set latin1 default NULL

    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 | 

    ------- ------------------------------------------------------------------------------------------------------------------------------------------------

    1 row in set (0.00 sec)

    mysql>

     

    翻看列的字符集

    mysql> show full columns from t3;

    ------- ------------- ------------------- ------ ----- --------- ------- --------------------------------- ---------

    | Field | Type        | Collation         | Null | Key | Default | Extra | Privileges                      | Comment |

    ------- ------------- ------------------- ------ ----- --------- ------- --------------------------------- ---------

    | a1    | varchar(10) | utf8_general_ci   | YES  |     | NULL    |       | select,insert,update,references |         | 

    | a2    | varchar(10) | latin1_swedish_ci | YES  |     | NULL    |       | select,insert,update,references |         | 

    ------- ------------- ------------------- ------ ----- --------- ------- --------------------------------- ---------

    2 rows in set (0.01 sec)

     

    修正列的字符集

    mysql> alter table t3 change a2 a2 varchar(10) character set utf8;

    Query OK, 0 rows affected (0.03 sec)

    Records: 0  Duplicates: 0  Warnings: 0

    mysql> show full columns from t3;

    ------- ------------- ----------------- ------ ----- --------- ------- --------------------------------- ---------

    | Field | Type        | Collation       | Null | Key | Default | Extra | Privileges                      | Comment |

    ------- ------------- ----------------- ------ ----- --------- ------- --------------------------------- ---------

    | a1    | varchar(10) | utf8_general_ci | YES  |     | NULL    |       | select,insert,update,references |         | 

    | a2    | varchar(10) | utf8_general_ci | YES  |     | NULL    |       | select,insert,update,references |         | 

    ------- ------------- ----------------- ------ ----- --------- ------- --------------------------------- ---------

    2 rows in set (0.00 sec)

    mysql>

     

    敲定:字符集从数据库、表、列的字符集是逐级世襲的涉及

     

    翻开字符集命令

    mysql> show create table t4; //展现表字符集

    mysql> show create database db2; //呈现库字符集

    mysql> show full columns from t4; //展现列字符集

    alter database db2 default character set utf8; //纠正库的字符集

    alter table t2 convert to character set latin1;//改进表的留存列字符集

    alter table t2 default character set utf8;  //更能改表的默许字符集

    alter table t3 change a2 a2 varchar(10) character set utf8; //更能改字段的字符集

       www.2cto.com  

    2.校正mysql的私下认可存储引擎

    mysql> show variables like 'storage%';

    ---------------- --------

    | Variable_name  | Value  |

    ---------------- --------

    | storage_engine | MyISAM | 

    ---------------- --------

    1 row in set (0.01 sec)

    mysql>

     

    在[mysqld]下增多如下参数

    default-storage-engine=innodb

     

    重启mysql服务,查看

    mysql> show variables like 'storage%';

    ---------------- --------

    | Variable_name  | Value  |

    ---------------- --------

    | storage_engine | InnoDB | 

    ---------------- --------

    1 row in set (0.01 sec)

    mysql>

     

    创办暗中同意字符集的表

    mysql> create table t4 (a1 int);

    Query OK, 0 rows affected (0.01 sec)

    mysql> show create table t4;

    ------- --------------------------------------------------------------------------------------

    | Table | Create Table                                                                         |

    ------- --------------------------------------------------------------------------------------

    | t4    | CREATE TABLE `t4` (

      `a1` int(11) default NULL

    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 | 

    ------- --------------------------------------------------------------------------------------

    1 row in set (0.00 sec)

     

    改善表的默许字符集

    mysql> alter table t4 engine myisam;

    Query OK, 0 rows affected (0.06 sec)

    Records: 0  Duplicates: 0  Warnings: 0

    mysql> show create table t4;

    ------- --------------------------------------------------------------------------------------  www.2cto.com  

    | Table | Create Table                                                                         |

    ------- --------------------------------------------------------------------------------------

    | t4    | CREATE TABLE `t4` (

      `a1` int(11) default NULL

    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 | 

    ------- --------------------------------------------------------------------------------------

    1 row in set (0.00 sec)

    mysql>

     

     

     

    作者 wyzxg

    1.改变mysql的字符集 mysql库现存字符集 mysql show variables like character%; -------------------------- -------------------...

    本文由新葡亰496net发布于网络数据库,转载请注明出处:MySQL字符集转换,MySQL字符集设置及字符转换

    关键词: