前言
数据库里面,部分数据表和数据是latin1的,部分数据表和数据是UTF8,还有部分表,表结构是utf8而数据是latin1。
这种奇葩情况,工作了十几年的我,还是第一次碰到。下面说一下,怎么样字符集统一成utf8
1,建一个空数据库
2,把表结构和数据是utf8的表导出,然后直接导入到新的数据库中
3,数据表和数据都是latin1的表,先导出表结构和数据,加上--default-character-set=latin1,将导出文件中,latin1改为utf8,在导入到新的数据库中。
4,表结构是utf8,表数据是latin1的,有二种方法:
4.1,先导出表结构,导入到新的数据库中。导出数据,加上--default-character-set=utf8,因为表结构是utf8,表数据是latin1,入库时已乱码。在将数据导入到新库中。这种方案有缺点,--default-character-set=utf8,导出的数据可能会有丢失,导出的数据,在导入时可能会报错。
4.2,可以通过binary字符集做中转,推荐这种方法
UPDATE user SET user_name = CONVERT(CONVERT(CONVERT(user_name USING latin1) USING binary) USING UTF8);
这种方法,省去了导出导入的麻烦,速度比较快,11w条数据,差不多5-6秒
数据库设计这块非常重要,在设计数据库时一定要考虑清楚。地基不牢,大厦迟早会倒的。
-------------------------------------------------------------------------------------------------------------------------
以下的文章主要介绍的是MySQL字符集的基本类型, 统一字符集的实际操作方法,等相关内容的介绍,以下就是MySQL字符集的相关内容的描述,希望你会在以后的学习或是工作中带来很大的帮助。
一. MySQL字符集类型
MySQL服务器中有六个关键位置使用了字符集的概念,他们是:client 、connection、database、results、server 、system。
a、其中client是客户端使用的字符集,相当于网页中的字符集设置如下<meta http-equiv="Content-Type" content="text/html; charset=utf-8">。
b、其中的connection是连接数据库的MySQL字符集设置类型,如果php没有指明连接数据库使用的字符集类型,就按照服务器端默认的字符集设置。
c、其中database是数据库服务器中某个库使用的字符集设定,如果建库时没有指明,将使用服务器安装时指定的字符集设置。
d、results是数据库给客户端返回时使用的MySQL字符集设定,如果没有指明,使用服务器默认的字符集。
e、server是服务器安装时指定的默认字符集设定。
f、 system是数据库系统使用的字符集设定。
PS:
1. system一般默认是utf-8字符集,server是最高的字符集设定,database没有单独设定就按照server的字符集设定,其他都是按照server的设定设置字符集。
2. 数据库内的每个表和字段也都有字符集的概念,一般都是根据上一级结构决定自身的字符集,比如表就根据database库的设定决定自己的字符集,字段根据表来决定自己的字符集。
二. 统一字符集的方法:(以utf-8字符集来进行安装)
1. 要彻底解决字符集的方法就是让MySQL在安装的时候就是用utf-8的字符集设定(默认为latin1),这样可以使上面的六个关键点的编码都为utf-8。
2. 使用STATUS命令查看MySQL中各个类别字符集的状态。
也可用SHOW VARIABLES LIKE 'character_set_%' 查看MySQL字符集的一些设置情况。
三. 若MySQL在安装时的字符集设置为latin1
可以在建库时,指定数据库的字符集为utf8。
- CREATE DATABASE qss DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
以上的相关内容就是对MySQL字符集总结的介绍,望你能有所收获。
-------------------------------------------------------------------------------------------------------------
0.查看数据库服务相关字符集:
show variables like 'character%';
1.查询指定数据库所有表的字符集情况:
show table status from immp_finance;
(通过编辑器筛选出需要的列)
2.查看指定表所有列的信息:
show full columns from fi_receipt_aux;