5.中文问题(自身,操作系统级别,应用软件的本身),mysql数据库备份,mysql数据库备份
第一层因素:
mysql的自身的设置
mysql有六处使用了字符集,分别为:client 、connection、database、results、server 、system。
mysql>show variables like 'character%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
mysql -uroot -p--default_character_set=gbk; (影响数据的输入和输出)
mysql> show variables like 'character%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | gbk |
| character_set_connection | gbk |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | gbk |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
insertinto worker(id,name,sex,birthday,salary,entry_date,resume) values(3,'赵六',0,'1985-09-21',7000,'2012-08-24','一个小小牛');
====>错误现象
mysql>insert into worker(id,name,sex,birthday,salary,entry_date,resume) values(3,'赵六',0,'1985-09-21',7000,'2012-08-24','一个小小牛');
ERROR 1366 (HY000): Incorrect string value:'\x80\xE4\xB8\xAA\xE5\xB0...' for column 'resume' at row 1
mysql>
====>结论: 让你的客户端 服务器 连接 ,都必须设置成一样 utf8gbk
第二层因素
操作系统语言环境的设置
a)操作系统的总体的语言环境
[mysql01@localhost~]$ cat /etc/sysconfig/i18n
LANG="zh_CN.UTF-8"
[mysql01@localhost~]$
b)当前用户的语言环境 linux的操作系统是基于多用户的操作系统
[mysql01@localhost~]$ env | grep LANG*
LANG=zh_CN.UTF-8
[mysql01@localhost~]$
=====>当前用户的LANG设置能屏蔽操作系统语言环境设置
实现:修改当前用户的语言环境
[mysql01@localhost~]$ env | grep LANG
LANG=C
[mysql01@localhost~]$
insertinto worker(id,name,sex,birthday,salary,entry_date,resume) values(3,'赵六六',0,'1985-09-21',7000,'2012-08-24','一个小牛');
第三层因素
你的应用软件的本身 文件的 存储问题....
文件存储
最常用有2种方式:utf8 code936
==== gbk转宽字节的函数....widewinskd函数 gbk转成宽字节(Unicode2)
备份mysql数据库
$ mysqldump -uroot -p mydb2 > 2.sql
//恢复msql数据库
$ mysqldump -uroot -p mydb2 < 2.sql
两台服务器产生的数据是不同的 但是他们的数据互不影响
使用直接拷贝数据库的备份和拷贝方法
另一种不涉及mysqldump备份数据库和表的方式是直接拷贝数据库表文件。典型地,这用诸如cp、tar或cpio实用程序。本文的例子使用cp。
当你使用一种直接备份方法时,你必须保证表不在被使用。如果服务器在你则正在拷贝一个表时改变它,拷贝就失去意义。
保证你的拷贝完整性的最好方法是关闭服务器,拷贝文件,然后重启服务器。如果你不想关闭服务器,要在执行表检查的同时锁定服务器。如果服务器在运行,相同的制约也适用于拷贝文件,而且你应该使用相同的锁定协议让服务器“安静下来”。
假设服务器关闭或你已经锁定了你想拷贝的表,下列显示如何将整个samp_db数据库备份到一个备份目录(DATADIR表示服务器的数据目录):%cd DATADIR%cp -r samp_db /usr/archive/mysql
单个表可以如下备份:
%cd DATADIR/samp_db%cp member.* /usr/archive/mysql/samp_db%cp score.* /usr/archive/mysql/samp_db ....
当你完成了备份时,你可以重启服务器(如果关闭了它)或释放加在表上的锁定(如果你让服务器运行)。
要用直接拷贝文件把一个数据库从一台机器拷贝到另一台机器上,只是将文件拷贝到另一台服务器主机的适当数据目录下即可。要确保文件是MyIASM格式或两台机器有相同的硬件结构,否则你的数据库在另一台主机上有奇怪的内容。你也应该保证在另一台机器上的服务器在你正在安装数据库表时不访问它们。