mysql字符集mysqldump_Mysqldump 字符集问题

在进行数据库备份时,使用mysqldump遇到了字符集问题,导致数据无法正常导入。通过检查数据库编码格式和.sql文件的字符集,发现不一致。通过修改.sql文件中的字符集设置和创建数据库时指定默认字符集,解决了导入错误的问题。错误信息涉及了latin1和utf8的不匹配。解决方案包括在导出和创建数据库时明确设置utf8字符集。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在做数据库的备份工作,遇到mysqldump问题,如下描述:

# mysqldump --default-character-set=latin1 wss_db_3 > wss_db_3.sql.`date +%Y%m%d%H%M%S`

# mysqldump --default-character-set=latin1 wss_db_3 < wss_db_2.sql.20120821123035

-- MySQL dump 10.13  Distrib 5.5.13, for Linux (x86_64)

--

-- Host: localhost    Database: wss_db_3

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

-- Server version5.5.13-log

/*!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 */;

/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;

/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;

/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;

/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;

/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

-- Dump completed on 2012-08-21 12:32:07

Dump出来可以,但是Dump进去的进修提示完成,数据库中却无半点数据,表结构也无。去除默认字符集也不行。

将命令换为

# mysql wss_db_3 < wss_db_2.sql.20120821112914

可导入原始表,但是提示如下错误,且很多view都未导入:

ERROR 1267 (HY000) at line 1856: Illegal mix of collations (utf8_general_ci,COERCIBLE) and (latin1_swedish_ci,IMPLICIT) for operation '='

应数据库编码格式与mysql编码格式不一致造成的。

mysql> show create database wss_db_3;

+----------+---------------------------------------------------------------------+

| Database | Create Database                                                     |

+----------+---------------------------------------------------------------------+

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

+----------+---------------------------------------------------------------------+

1 row in set (0.00 sec)

而.sql文件里面有很多ENGINE=MYISAM(view),于是默认建表为latin1。

将ENGINE=MYISAM改为ENGINE=MYISAM DEFAULT CHARACTER=utf8

#mysql wss_test_3 < wss_test_2.sql.20120821112914

便可以。

另,在导出数据库时,设置字符集,在创建数据库时也设置默认字符集:

#mysqldump  --default-character-set=utf8 wss_test_2 > wss_test_2.sql.test.utf8.`date +%Y%m%d%H%M%S`

mysql>CREATE DATABASE `wss_db_3` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

则在导入的时候不会出错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值