• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    简析mysql字符集导致恢复数据库报错问题

    mysql字符集编码错误的导入数据会提示错误了,这个和插入数据一样如果保存的数据与mysql编码不一样那么肯定会出现导入乱码或插入数据丢失的问题,下面我们一起来看一个例子。

    script>ec(2);/script>

    恢复数据库报错:由于字符集问题,最原始的数据库默认编码是latin1,新备份的数据库的编码是utf8,因此导致恢复错误。

    [root@hk byrd]# /usr/local/mysql/bin/mysql -uroot -p'admin' t4x  /tmp/11x-B-2014-06-18.sql 
    ERROR 1064 (42000) at line 292: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''[caption id=\"attachment_271\" align=\"aligncenter\" width=\"300\"]a href=\"ht' at line 1
    

    修复方法(未实测):

    [root@Test ~]# /usr/local/mysql/bin/mysql -uroot -p'admin' --default-character-set=latin1 t4x  /tmp/11x-B-2014-06-18.sql 
    MySQL
    -- MySQL dump 10.13 Distrib 5.5.37, for Linux (x86_64)
    --
    -- Host: localhost  Database: t4x
    -- ------------------------------------------------------
    -- Server version    5.5.37-log
    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
    /*!40101 SET NAMES utf8 */;
    /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
    /*!40103 SET TIME_ZONE=' 00:00' */;
    /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
    /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
    /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
    /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
    --
    -- Current Database: `t4x`
    --
    CREATE DATABASE /*!32312 IF NOT EXISTS*/ `t4x` /*!40100 DEFAULT CHARACTER SET utf8 */;
    --
    -- Table structure for table `wp_baidusubmit_sitemap`
    --
    DROP TABLE IF EXISTS `wp_baidusubmit_sitemap`;
    /*!40101 SET @saved_cs_client   = @@character_set_client */;
    /*!40101 SET character_set_client = utf8 */;
    CREATE TABLE `wp_baidusubmit_sitemap` (
     `sid` int(11) NOT NULL AUTO_INCREMENT,
     `url` varchar(255) NOT NULL DEFAULT '',
     `type` tinyint(4) NOT NULL,
     `create_time` int(10) NOT NULL DEFAULT '0',
     `start` int(11) DEFAULT '0',
     `end` int(11) DEFAULT '0',
     `item_count` int(10) unsigned DEFAULT '0',
     `file_size` int(10) unsigned DEFAULT '0',
     `lost_time` int(10) unsigned DEFAULT '0',
     PRIMARY KEY (`sid`),
     KEY `start` (`start`),
     KEY `end` (`end`)
    ) ENGINE=MyISAM AUTO_INCREMENT=84 DEFAULT CHARSET=utf8;
    /*!40101 SET character_set_client = @saved_cs_client */;
    0
    1
    [root@hk byrd]# /usr/local/mysql/bin/mysql -uroot -p'admin' t4x  /tmp/t4x-B-2014-06-17.sql 
    ERROR 1064 (42000) at line 295: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''i' at line 1
    

    MySQL

    -- MySQL dump 10.11
    --
    -- Host: localhost  Database: t4x
    -- ------------------------------------------------------
    -- Server version    5.0.95-log
    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
    /*!40101 SET NAMES utf8 */;
    /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
    /*!40103 SET TIME_ZONE=' 00:00' */;
    /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
    /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
    /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
    /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
    -- 
    -- Current Database: `t4x`
    --
    CREATE DATABASE /*!32312 IF NOT EXISTS*/ `t4x` /*!40100 DEFAULT CHARACTER SET latin1 */;
    USE `t4x`;
    --
    -- Table structure for table `wp_baidusubmit_sitemap`
    --
    DROP TABLE IF EXISTS `wp_baidusubmit_sitemap`;
    /*!40101 SET @saved_cs_client   = @@character_set_client */;
    /*!40101 SET character_set_client = utf8 */;
    CREATE TABLE `wp_baidusubmit_sitemap` (
     `sid` int(11) NOT NULL auto_increment,
     `url` varchar(255) NOT NULL default '',
     `type` tinyint(4) NOT NULL,
     `create_time` int(10) NOT NULL default '0',
     `start` int(11) default '0',
     `end` int(11) default '0',
     `item_count` int(10) unsigned default '0',
     `file_size` int(10) unsigned default '0',
     `lost_time` int(10) unsigned default '0',
     PRIMARY KEY (`sid`),
     KEY `start` (`start`),
     KEY `end` (`end`)
    ) ENGINE=MyISAM AUTO_INCREMENT=83 DEFAULT CHARSET=utf8;
    /*!40101 SET character_set_client = @saved_cs_client */;
    

    字符集相关:

    MySQL

    mysql>show variables like '%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>set names gbk;
    mysql>show variables like '%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>system cat /etc/my.cnf | grep default  #客户端设置字符集client下面 
    default-character-set=gbk
    mysql>show variables like '%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> system cat /etc/my.cnf|grep character-set-server  #客户端设置字符集mysqld下面 
    character-set-server = cp1250 
    mysql> show variables like '%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/ |
    -------------------------- -------------------------------------------- 
    8 rows in set (0.00 sec)
    

    其他的一些设置方法:

    修改数据库的字符集

      mysql>use mydb
      mysql>alter database mydb character set utf-8;
    

    创建数据库指定数据库的字符集

      mysql>create database mydb character set utf-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/mysql restart

    通过MySQL命令行修改:

    mysql> set character_set_client=utf8;
    Query OK, 0 rows affected (0.00 sec)
    mysql> set character_set_connection=utf8;
    Query OK, 0 rows affected (0.00 sec)
    mysql> set character_set_database=utf8;
    Query OK, 0 rows affected (0.00 sec)
    mysql> set character_set_results=utf8;
    Query OK, 0 rows affected (0.00 sec)
    mysql> set character_set_server=utf8;
    Query OK, 0 rows affected (0.00 sec)
    mysql> set character_set_system=utf8;
    Query OK, 0 rows affected (0.01 sec)
    mysql> set collation_connection=utf8;
    Query OK, 0 rows affected (0.01 sec)
    mysql> set collation_database=utf8;
    Query OK, 0 rows affected (0.01 sec)
    mysql> set collation_server=utf8;
    Query OK, 0 rows affected (0.01 sec)
    

    查看:

    mysql> show variables like '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/ |
    -------------------------- ---------------------------- 
    8 rows in set (0.03 sec)
    mysql> show variables like 'collation_%';
    ---------------------- ----------------- 
    | Variable_name     | Value      |
    ---------------------- ----------------- 
    | collation_connection | utf8_general_ci |
    | collation_database  | utf8_general_ci |
    | collation_server   | utf8_general_ci |
    ---------------------- ----------------- 
    3 rows in set (0.04 sec)

    总结

    以上就是本文关于简析mysql字符集导致恢复数据库报错问题的全部内容,希望对大家有所帮助。有什么问题可以随时留言,小编会及时回复大家。感谢朋友们对本站的支持!

    您可能感兴趣的文章:
    • mysql修改数据库编码(数据库字符集)和表的字符编码的方法
    • mysql字符集和数据库引擎修改方法分享
    • DW中链接mysql数据库时,建立字符集中文出现乱码的解决方法
    • mysql如何在已有数据库上统一字符集
    上一篇:mysql利用参数sql_safe_updates限制update/delete范围详解
    下一篇:MySQL数据库表分区注意事项大全【推荐】
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    简析mysql字符集导致恢复数据库报错问题 简析,mysql,字符集,导致,