`
isiqi
  • 浏览: 16590295 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

使用mysqldump 把GBK编码的数据库转换成UTF8存储

阅读更多

打算把一个数据库编码为 utf8 的数据库,转换成gbk 来存储。以目前mysql的版本,先做一个转换测试..在数据很大量的情况下,我认为很有必要呵呵。 记下来备忘了。

目前mysql状态

mysql 版本: Server version: 5.1.41-log Source distribution

目前编码情况是这样的:

mysql> show variables like 'character%';
+--------------------------+-----------------------------------------+
| Variable_name | Value |
+--------------------------+-----------------------------------------+
| character_set_client | gbk |
| character_set_connection | gbk |
| character_set_database | gbk |
| character_set_filesystem | binary |
| character_set_results | gbk |
| character_set_server | gbk |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/mysql5/share/mysql/charsets/ |
+--------------------------+-----------------------------------------+

可以看到,除了mysql系统级默认是utf8版本外和mysql数据文件存储编码是binary 外,其他都是GBK编码。

我们先从原数据库备份出数据先,原数据库的编码和表、字段 都是UTF8等等

beihai365# mysqldump -u root -p --no-create-info --default-character-set=utf8 ud_sphinx > /usr/local/sqlbak/ud_sphinx.sql


--default-character-set=utf8 表示以 utf8为导出数据文件的内部编码

用vi 打开到处的数据库文件 ud_sphinx.sql 可以看到头部有这么一行

/*!40101 SET NAMES utf8 */;

说明了我们的这个数据库文件以utf8导出的。

这个是试验得出的结果~~不是书上的理论。

书上说 “--default-character-set=gbk 表示 设置以什么字符集进行连接”这个话看了真是莫名其妙...

如果证明导出的的文件内部编码就是utf8的呢

我们用ie打开导出的数据库文件 ud_sphinx.sql

ie -> 查看 -> 编码 . 我们选择gb2312来进行文本的显示,结果发现,看到的都是乱码

LOCK TABLES `business` WRITE;
/*!40000 ALTER TABLE `business` DISABLE KEYS */;
INSERT INTO `business` VALUES (1,1,'鍏揪,鑷杞?瓒婇噹,鎷撳睍,鍩硅','鍖楁捣鍏揪鑷杞?-涓撲笟鐨勫崠杞︽嫇灞曟椿鍔?,'http://bada.beihai365.com/'),(3,3,'鐗涜叐,鐗涜叐绮?鐗涜叐寮?鐗逛骇','鍖楁捣鐗逛骇鐗涜叐绮夊ソ鍚冧笉璐?,'http://www.beihai365.com/bbs/viewthread.php?tid=1380307');
/*!40000 ALTER TABLE `business` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

然后,我们选择 utf8编码来进行显示,就看到,中文显示正确了。

接下来开始创建一个一模一样数据结构的数据库,但数据库编码,和表、字段等编码都是GBK的

创建数据库:

create database ud_test character set=gbk;

为了快速,所以我们选择了复制表结构


mysql> create table business like ud_sphinx.business;

因为默认的 ud_sphinx.business 编码是 utf8,所以修改一下编码

alter table business character set gbk;

好,开始导入数据

我做了几个试验:

1 我没有显示显式在命令中指定导入编码

mysql -u root -p ud_test < /usr/local/sqlbak/ud_7.sql ( 导入成功,无乱码)

2 我显式指定编码,而且还是指定了一个 latin1 编码


mysql -u root -p ud_test --default-character-set=latin1 < /usr/local/sqlbak/ud_7.sql (导入成功,无乱码)

3 我直接修改 ud_7.sql里面的 set names * 语句,指定为 gbk 编码

beihai365# mysql -u root -p ud_test < /usr/local/sqlbak/ud_7.sql (乱码)


总结:

1 --default-character-set 参数导出的时候,是告诉mysql 生成的备份文件所使用的文件内码是啥。

2 导出的数据文件里面的 set names * 和 显式在命令中指定编码,优先起作用的是 数据文件里面的 set names *

转换数据库编码的时候关键几点:

第一个是源字符集和要导出的字符集的,数据集范围问题:小集变大集可以,大集变小集,可能会出现乱码。(可使用ie来选择编码来浏览看是否乱码)

第二个导入数据的时候,要注意数据文件的内部编码是什么(也就是导出 default-character-set=*指定的编码) ,还要注意,数据文件头部的 set names * 写的是什么编码。 内部编码和 set names 的编码要一至,导入的时候才不会出现乱码现象。 set names 是告诉mysql 以什么样的编码方式来导入这个数据文件。其实和 http server 里面的mime 一个道理。

okay 打完收工...

分享到:
评论

相关推荐

    MySQL GBK→UTF-8编码转换

    GBK编码是中国大陆广泛使用的汉字编码标准,而UTF-8是一种更通用的Unicode编码,支持世界上几乎所有的字符集。以下是进行这种转换的详细步骤和相关知识点: 1. **准备工作**: - 确保你的MySQL服务器版本至少是4.1...

    完美转换MySQL的字符集 解决查看utf8源文件中的乱码问题

    标题中的“完美转换MySQL的字符集 解决查看utf8源文件中的乱码问题”涉及到的是在MySQL数据库中处理字符编码转换的问题,特别是针对从不同字符集(如GBK或Latin1)转换到UTF8的情况,以解决乱码问题。描述中提到的...

    mysql.rar_mysql导出

    例如,创建一个使用UTF-8编码的数据库: ```sql CREATE DATABASE mydatabase CHARACTER SET utf8 COLLATE utf8_general_ci; ``` `CHARACTER SET`定义了字符集,`COLLATE`指定了排序规则。`utf8_general_ci`是一种...

    mysql字符集转换

    这里通过指定`--default-character-set=utf8`来告知MySQL使用`utf8`字符集导入数据。 - **将数据转换为`gb2312`字符集**: ```bash D:\usr\mysql41\bin&gt;mysql -u root -p --default-character-set=gb2312 test...

    mysql5.6.19非安装版中文乱码解决

    例如,使用`mysqldump`工具导出数据时,可以添加`--default-character-set=utf8`参数来确保导出的数据使用正确的字符集。 ```bash mysqldump -u root -p mydb --default-character-set=utf8 &gt; backup.sql ``` 导入...

    MYSQL备份乱码

    3. 备份文件的编码格式与恢复时的读取编码不匹配:例如,备份文件是`gbk`编码,但在恢复时使用了`utf8`解码。 4. 数据导入导出过程中,没有正确指定字符集:如使用`LOAD DATA INFILE`或`INSERT INTO`语句时未指定...

    解决MySQL中文乱码以及版本不一致问题.pdf

    如果数据库中的字段包含中文且编码为UTF8,而Excel默认使用GBK编码,导出后中文可能出现乱码。为解决这个问题,可以使用`CONVERT()`函数转换编码,例如:`SELECT CONVERT(column_name USING gbk) FROM table_name;` ...

    mysql关联两张表时的编码问题及解决办法

    接着,导出源表数据,转换文件编码为utf8,最后将转换后的数据导入到新表中。 导出数据的命令示例: ```bash mysqldump -d DB_Dig &gt; /usr/local/tmp/tables.sql ``` 导入数据的命令示例: ```bash mysql -h...

    Mysql字符集

    不同的字符集支持不同语言的字符,如GBK支持中文简体字符,UTF8则支持全球大多数语言的字符。 **2. 校对规则(Collation)**:校对规则是字符集的子集,它定义了字符集中的字符如何进行排序和比较。校对规则决定了...

    Mysql运维操作

    例如:`iconv -f utf-8 -t gbk base_user.sql &gt; base_user_gbk.sql` ##### 9. 连接数据库并查看当前库的编码 - **命令**:`status;` 通过这个命令可以查看当前数据库连接的编码情况。 ##### 10. 设置成需要的...

    mysql 中文乱码 解决方法集锦

    在处理数据库文件(如`.sql`备份文件)时,如果包含中文且编码格式不一致,可以使用工具进行编码转换,例如iconv,将文件转换为UTF-8编码。 总之,解决MySQL中文乱码问题需要关注以下几个方面: 1. 确保MySQL服务器...

    Mysql中文乱码以及导出为sql语句和Excel问题解决方法[图文]

    例如,如果数据库和表都是UTF-8编码,那么所有存储的中文数据都应该能够正常显示。 在Mac OS X环境下,使用MySQL Workbench进行数据迁移时,可能会遇到版本不兼容的问题。在这种情况下,可以使用命令行工具`...

    对MySQL中字符集的相关设置操作的基本教程

    特别当网站、应用前端使用UTF-8字符集,而数据库服务器默认使用GBK或 latin1 字符集时,如果不进行字符集转换处理,中文等特殊字符将显示为乱码。同时,进行数据库迁移和备份操作时,也需注意字符集的设置,否则可能...

    php网络开发完全手册

    3.2.3 转换成字符串型 55 3.2.4 转换成布尔型 55 3.2.5 转换成数组 56 3.2.6 转换成对象 56 3.2.7 使用函数进行数据类型的强制 3.2.7 转换 57 3.3 小结 57 第4章 函数处理与数据引用 58 4.1 函数的定义与使用 58 ...

Global site tag (gtag.js) - Google Analytics