打算把一个数据库编码为 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 打完收工...
分享到:
相关推荐
GBK编码是中国大陆广泛使用的汉字编码标准,而UTF-8是一种更通用的Unicode编码,支持世界上几乎所有的字符集。以下是进行这种转换的详细步骤和相关知识点: 1. **准备工作**: - 确保你的MySQL服务器版本至少是4.1...
标题中的“完美转换MySQL的字符集 解决查看utf8源文件中的乱码问题”涉及到的是在MySQL数据库中处理字符编码转换的问题,特别是针对从不同字符集(如GBK或Latin1)转换到UTF8的情况,以解决乱码问题。描述中提到的...
例如,创建一个使用UTF-8编码的数据库: ```sql CREATE DATABASE mydatabase CHARACTER SET utf8 COLLATE utf8_general_ci; ``` `CHARACTER SET`定义了字符集,`COLLATE`指定了排序规则。`utf8_general_ci`是一种...
这里通过指定`--default-character-set=utf8`来告知MySQL使用`utf8`字符集导入数据。 - **将数据转换为`gb2312`字符集**: ```bash D:\usr\mysql41\bin>mysql -u root -p --default-character-set=gb2312 test...
例如,使用`mysqldump`工具导出数据时,可以添加`--default-character-set=utf8`参数来确保导出的数据使用正确的字符集。 ```bash mysqldump -u root -p mydb --default-character-set=utf8 > backup.sql ``` 导入...
3. 备份文件的编码格式与恢复时的读取编码不匹配:例如,备份文件是`gbk`编码,但在恢复时使用了`utf8`解码。 4. 数据导入导出过程中,没有正确指定字符集:如使用`LOAD DATA INFILE`或`INSERT INTO`语句时未指定...
如果数据库中的字段包含中文且编码为UTF8,而Excel默认使用GBK编码,导出后中文可能出现乱码。为解决这个问题,可以使用`CONVERT()`函数转换编码,例如:`SELECT CONVERT(column_name USING gbk) FROM table_name;` ...
接着,导出源表数据,转换文件编码为utf8,最后将转换后的数据导入到新表中。 导出数据的命令示例: ```bash mysqldump -d DB_Dig > /usr/local/tmp/tables.sql ``` 导入数据的命令示例: ```bash mysql -h...
不同的字符集支持不同语言的字符,如GBK支持中文简体字符,UTF8则支持全球大多数语言的字符。 **2. 校对规则(Collation)**:校对规则是字符集的子集,它定义了字符集中的字符如何进行排序和比较。校对规则决定了...
例如:`iconv -f utf-8 -t gbk base_user.sql > base_user_gbk.sql` ##### 9. 连接数据库并查看当前库的编码 - **命令**:`status;` 通过这个命令可以查看当前数据库连接的编码情况。 ##### 10. 设置成需要的...
在处理数据库文件(如`.sql`备份文件)时,如果包含中文且编码格式不一致,可以使用工具进行编码转换,例如iconv,将文件转换为UTF-8编码。 总之,解决MySQL中文乱码问题需要关注以下几个方面: 1. 确保MySQL服务器...
例如,如果数据库和表都是UTF-8编码,那么所有存储的中文数据都应该能够正常显示。 在Mac OS X环境下,使用MySQL Workbench进行数据迁移时,可能会遇到版本不兼容的问题。在这种情况下,可以使用命令行工具`...
特别当网站、应用前端使用UTF-8字符集,而数据库服务器默认使用GBK或 latin1 字符集时,如果不进行字符集转换处理,中文等特殊字符将显示为乱码。同时,进行数据库迁移和备份操作时,也需注意字符集的设置,否则可能...
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 ...