使用命令行方式导出数据库(包括数据库内容):
mysqldump -u 用户名 -p 数据库名 > 导出脚本.sql;
导入数据库:
1、创建空的数据库,e.g. TBL_Test
2、将脚本导入到TBL_Test中:
mysql -u 用户名 -p 数据库名 < 导出脚本.sql
以上是从书上看到的,在ubuntu6下面验证一下,没有什么问题,便以为就此可以了事。但事实证明,我的思维方式还停留在window时代,没有考虑到在mysql的不同版本之间的转换会出现中文乱码的问题,结果惹来一身麻烦。
下面先看一下MySQL对字符集的支持。
MySQL一定要有一个字符集,这可以是在编译时指定(默认为latin1),也可以是在配置文里指定(配置文件是MySQL安装目录下的my.cnf(/etc/mysql/my.cnf),如“default_character_set=utf8”设置默认字符集为utf8,如果没有指定,则默认继承编译时所指定的字符集),也可以是通过启动时加入参数指定(如果没有指定,则默认继承配置文件的字符集)。
NOTE:utf8而不是utf-8! 因为在mysql的关于字符集的文件/usr/share/mysql/charsets/Index.xml中,定义的是utf8,而不是utf-8。所以,如果这里误写成utf-8,那么就会无法启动mysql!
MySQL可以设置服务器级、数据库级、表级与列级的字符集,下一级别的字符集默认继承上一级别的选项。而最终起作用的是列级的字符集。
因此,当什么都没做的时候,latin1就会作为MySQL的默认字符集。像我从MySQL5.0导出sql脚本,脚本中每句create table后面就有“DEFAULT CHARSET=latin1”,不过奇怪的是,当把该脚本导入到4.0的数据库中时,便弹出warning说不支持default charset=latin1,至今仍不解。
为了使读写数据库时不出现中文乱码的问题,可以在PHP程序查询数据库前,执行mysql_query("set names utf-8");,并且数据库使用utf8存储(通过修改配置文件my.cnf)。
另外:
如果要导出表,则可以是:mysqldump -u 用户名 -p 数据库名 数据表名 > 导出脚本.sql;
如果要设定导出数据库的字符集,则可以是:mysqldump -u 用户名 -p --default-character-set=utf8 数据库名 > 导出脚本.sql;
如果要设定导出数据库的版本,则可以是:mysqldump -u 用户名 -p --compatible=mysql40 数据库名 > 导出脚本.sql。--compatible= 可以跟得参数有 mysql323 mysql40 oracle mssql db2 等等。