手头上有一台mysql数据库服务器,因为历史原因,mysql数据库的字符编码为latin1,但PHP程序使用的是utf8字符编码,所以磨途歌每次从mysql数据库中读取数据,都得向mysql数据库发送设置字符集的命令:mysql_query("SET NAMES latin1");
虽然PHP通过设置字符编码能解决乱码问题,但是用phpmyadmin浏览mysql数据库,中文依然显示为乱码,很不方便管理。
最近在整理服务器,备份好mysql数据库后,就开始动手转换mysql数据库字符编码,把latin1编码的数据转成utf8编码:
一)用mysqldump工具导出数据库mysqldump --all-databases --default-character-set=latin1 -u root -p > all_db.sqlmysqldump --databases mo2g --default-character-set=latin1 -u root -p > mo2g.sqlmysqldump参数mysqldump参数说明
--all-databases导出mysql数据库服务器上所有的数据库
--databases导出mysql数据库服务器上指定的数据库
--default-character-set设置连接mysql数据库服务器的字符编码
-u设置登录mysql数据库服务器的用户名
-p如果用户名的密码不为空,必须添加该参数
-E合并insert,能有效压缩sql文件大小
-R备份存储过程
-d不导出数据
-t不导出表结构
二)修改导出的sql文件,有点类似下边,虽然mo2g这台服务用的是MariaDB数据库,但同样使用于mysql数据库。-- MySQL dump 10.14 Distrib 5.5.32-MariaDB, for Linux (x86_64)
--
-- Host: localhost Database: mo2g
-- ------------------------------------------------------
-- Server version 5.5.29-MariaDB
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES latin1 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Current Database: `mo2g`
--
把第10行的代码改一下/*!40101 SET NAMES latin1 */;
改成/*!40101 SET NAMES utf8 */;
三)最后再将修改的sql文件导入MariaDB数据库,mysql数据库同样适用。mysql -u root -p
如果没有显示任何错误,就说明已经成功把MariaDB数据库或mysql数据库由latin1字符编码转换成utf8编码了。
现在,就用phpmyadmin连接MariaDB数据库或mysql数据库看看吧,是不是成功了?