时间:2021-07-01 10:21:17 帮助过:3人阅读
MySQL的字符集和校对规则分四个级别的默认设置: 服务器级、数据库级、表级、字段级 服务器级: 在MySQL服务启动时来确定 1.在my.cnf中设置:[mysqld] character-set-server=gbk 2.在启动选项中指定:mysqld --character-set-server=gbk 3.在编译时指定:shell> cmake . -DDEFAULT_CHARSET=gbk 在没有指定校对规则的情况下,使用默认的校对规则。 //查询当前服务器的字符集 show variables like ‘character_set_server‘; //查询当前服务器的校对集 show variables like ‘collation_server‘; 数据库级: 在创建数据库的时候指定,也可以在创建完成之后通过alter database命令修改。推荐在创建数据库的时候显式指定字符集和校对规则,如果没有指定,则默认使用服务器字符集和校对规则。 show variables like ‘character_set_database‘; show variables like ‘collation_database‘; 表级: 在创建表的时候指定,如果没有指定则使用数据库的字符集和校对规则。 show create table t1; 列级: 列级别的字符集一般不适用,主要是针对不同字段需要使用不同字符集的情况,遇到的几率很小。 以上四种字符集设置确定的是数据保存的字符集和校对规则,对于实际的应用程序,还存在客户端和服务器之间交互的字符集和校对规则设置。 MySQL提供了三个参数:character_set_client、character_set_connection、character_set_results.分别代表客户端、连接、返回结果的字符集。通长情况下这三种字符集是相同的。 一般通过下面的命令设置这三个参数。 set names utf8; //应用程序每次连接数据库都需要执行。
如果数据库中已经存在数据,此时想修改字符集不能通过 alter table 或者alter database这 两个命令都无法作用于已存在的数据。 一下模拟lantin1字符集数据库修改成GBK字符集数据库的过程 1.导出表结构: mysqldump -uroot -p --default-character-set=gbk -d databasename> createtab.sql --default-character-set=gbk:设置以什么方式连接 -d:表示只导出表结构,不导出数据 2.手工修改createtab.sql中表结构定义中的字符集为新的字符集。 3.确保记录不在更新导出所有记录。 mysqldump -uroot -p --quick --no-create-info --extended-insert --default-character- set=latin1 databasename> data.sql --quick:该选项用于转储大的表 --extended-insert:使用包括几个values列表的多行insert语法,加速插入。 --no-create-info:不导出每个转储表的create table语句。 --default-character-set=latain1:按照原有的字符集导出数据。 4.打开data.sql,将set names latin1 手工修改为:set names gbk; 5.使用新的字符集创建新的数据库 create database databasename default charset gbk; 6.创建表,执行createtab.sql mysql -uroot -p databasename < createtab.sql 7.导入数据,执行data.sql mysql -uroot -p databasename < data.sql
Mysql系列-字符集
标签: