简析mysql字符集导致恢复数据库报错问题
mysql字符集编码错误的导入数据会提示错误了,这个和插入数据一样如果保存的数据与mysql编码不一样那么肯定会出现导入乱码或插入数据丢失的问题,下面我们一起来看一个例子。
恢复数据库报错:由于字符集问题,最原始的数据库默认编码是latin1,新备份的数据库的编码是utf8,因此导致恢复错误。
[root@hkbyrd]#/usr/local/mysql/bin/mysql-uroot-p'admin't4x修复方法(未实测):
[root@Test~]#/usr/local/mysql/bin/mysql-uroot-p'admin'--default-character-set=latin1t4xMySQL
--MySQLdump10.11 -- --Host:localhostDatabase:t4x -------------------------------------------------------- --Serverversion5.0.95-log /*!40101SET@OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT*/; /*!40101SET@OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS*/; /*!40101SET@OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION*/; /*!40101SETNAMESutf8*/; /*!40103SET@OLD_TIME_ZONE=@@TIME_ZONE*/; /*!40103SETTIME_ZONE='00:00'*/; /*!40014SET@OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS,UNIQUE_CHECKS=0*/; /*!40014SET@OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS,FOREIGN_KEY_CHECKS=0*/; /*!40101SET@OLD_SQL_MODE=@@SQL_MODE,SQL_MODE='NO_AUTO_VALUE_ON_ZERO'*/; /*!40111SET@OLD_SQL_NOTES=@@SQL_NOTES,SQL_NOTES=0*/; -- --CurrentDatabase:`t4x` -- CREATEDATABASE/*!32312IFNOTEXISTS*/`t4x`/*!40100DEFAULTCHARACTERSETlatin1*/; USE`t4x`; -- --Tablestructurefortable`wp_baidusubmit_sitemap` -- DROPTABLEIFEXISTS`wp_baidusubmit_sitemap`; /*!40101SET@saved_cs_client=@@character_set_client*/; /*!40101SETcharacter_set_client=utf8*/; CREATETABLE`wp_baidusubmit_sitemap`( `sid`int(11)NOTNULLauto_increment, `url`varchar(255)NOTNULLdefault'', `type`tinyint(4)NOTNULL, `create_time`int(10)NOTNULLdefault'0', `start`int(11)default'0', `end`int(11)default'0', `item_count`int(10)unsigneddefault'0', `file_size`int(10)unsigneddefault'0', `lost_time`int(10)unsigneddefault'0', PRIMARYKEY(`sid`), KEY`start`(`start`), KEY`end`(`end`) )ENGINE=MyISAMAUTO_INCREMENT=83DEFAULTCHARSET=utf8; /*!40101SETcharacter_set_client=@saved_cs_client*/;字符集相关:
MySQL
mysql>showvariableslike'%character_set%'; ------------------------------------------------------ |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>setnamesgbk; mysql>showvariableslike'%character_set%'; ------------------------------------------------------ |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/| ------------------------------------------------------ mysql>systemcat/etc/my.cnf|grepdefault#客户端设置字符集client下面 default-character-set=gbk mysql>showvariableslike'%character_set%'; ------------------------------------------------------ |Variable_name|Value| ------------------------------------------------------ |character_set_client|gbk| |character_set_connection|gbk| |character_set_database|latin1| |character_set_filesystem|binary| |character_set_results|gbk| |character_set_server|latin1| |character_set_system|utf8| |character_sets_dir|/usr/share/mysql/charsets/| ------------------------------------------------------ mysql>systemcat/etc/my.cnf|grepcharacter-set-server#客户端设置字符集mysqld下面 character-set-server=cp1250 mysql>showvariableslike'%character_set%'; ---------------------------------------------------------------------- |Variable_name|Value| ---------------------------------------------------------------------- |character_set_client|utf8| |character_set_connection|utf8| |character_set_database|cp1250| |character_set_filesystem|binary| |character_set_results|utf8| |character_set_server|cp1250| |character_set_system|utf8| |character_sets_dir|/byrd/service/mysql/5.6.26/share/charsets/| ---------------------------------------------------------------------- 8rowsinset(0.00sec)其他的一些设置方法:
修改数据库的字符集
mysql>usemydb mysql>alterdatabasemydbcharactersetutf-8;创建数据库指定数据库的字符集
mysql>createdatabasemydbcharactersetutf-8;通过配置文件修改:
修改/var/lib/mysql/mydb/db.opt
default-character-set=latin1 default-collation=latin1_swedish_ci为
default-character-set=utf8 default-collation=utf8_general_ci重起MySQL:
[root@bogon~]#/etc/rc.d/init.d/mysqlrestart
通过MySQL命令行修改:
mysql>setcharacter_set_client=utf8; QueryOK,0rowsaffected(0.00sec) mysql>setcharacter_set_connection=utf8; QueryOK,0rowsaffected(0.00sec) mysql>setcharacter_set_database=utf8; QueryOK,0rowsaffected(0.00sec) mysql>setcharacter_set_results=utf8; QueryOK,0rowsaffected(0.00sec) mysql>setcharacter_set_server=utf8; QueryOK,0rowsaffected(0.00sec) mysql>setcharacter_set_system=utf8; QueryOK,0rowsaffected(0.01sec) mysql>setcollation_connection=utf8; QueryOK,0rowsaffected(0.01sec) mysql>setcollation_database=utf8; QueryOK,0rowsaffected(0.01sec) mysql>setcollation_server=utf8; QueryOK,0rowsaffected(0.01sec)查看:
mysql>showvariableslike'character_set_%'; ------------------------------------------------------ |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|utf8| |character_set_system|utf8| |character_sets_dir|/usr/share/mysql/charsets/| ------------------------------------------------------ 8rowsinset(0.03sec) mysql>showvariableslike'collation_%'; --------------------------------------- |Variable_name|Value| --------------------------------------- |collation_connection|utf8_general_ci| |collation_database|utf8_general_ci| |collation_server|utf8_general_ci| --------------------------------------- 3rowsinset(0.04sec)总结
以上就是本文关于简析mysql字符集导致恢复数据库报错问题的全部内容,希望对大家有所帮助。有什么问题可以随时留言,小编会及时回复大家。感谢朋友们对本站的支持!