我正在将MySQL数据库从笔记本电脑重新导入PC。我导出了我的WAMP MySQL .sql
文件,现在我正试图在我的电脑上导入它。这一直在以前工作,我从那时起只改变了几张桌子......但是现在我收到了以下错误:
#1064 - 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
'CREATE TABLE IF NOT EXISTS `join_quests_npcs` (
`jqn_id` int(6) NOT NULL AUTO_' at line 16
的信息:
Desktop WAMP MySQL ver: `5.5.16`,
Laptop WAMP MySQL ver: `5.6.12`
File to import: char set of file: `utf 8`
Format: `sql`
Format-specific options: SQL compatibility mode: `none`
但我不认为WAMP版本中的这个小差异会导致语法错误。
我也没有看到它抱怨的内容有什么问题......以下是我正在尝试导入的导出的.sql
文件中抱怨的块:
CREATE TABLE IF NOT EXISTS `join_quests_npcs` (
`jqn_id` int(6) NOT NULL AUTO_INCREMENT,
`quest_id` int(6) NOT NULL,
`npc_id` int(6) NOT NULL,
PRIMARY KEY (`jqn_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=15 ;
有什么想法吗?
谢谢!
编辑:
也很好奇:
创建.sql
文件中的第一个表没有问题:
-- phpMyAdmin SQL Dump
-- version 4.0.4
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Generation Time: Oct 27, 2014 at 09:15 PM
-- Server version: 5.6.12-log
-- PHP Version: 5.4.12
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
/*!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 */;
--
-- Database: `my_test_db_2014`
--
CREATE DATABASE IF NOT EXISTS `my_test_db_2014` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
USE `my_test_db_2014`;
-- --------------------------------------------------------
--
-- Table structure for table `gather_items`
--
CREATE TABLE IF NOT EXISTS `gather_items` (
`item_id` int(6) NOT NULL,
`item_name` varchar(100) NOT NULL,
`item_chinese` varchar(100) NOT NULL,
`item_x` int(6) NOT NULL,
`item_y` int(6) NOT NULL,
`item_image` varchar(255) NOT NULL,
`item_total` int(1) NOT NULL,
`item_cost` int(11) NOT NULL,
PRIMARY KEY (`item_id`),
UNIQUE KEY `gather_item_id` (`item_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- Dumping data for table `gather_items`
--
INSERT INTO `gather_items` (`item_id`, `item_name`, `item_chinese`, `item_x`, `item_y`, `item_image`, `item_total`, `item_cost`) VALUES
(1, 'rice', 'fàn', 60, 255, 'data/img/sprite/rice.png', 1, 10),
(2, 'water', 'shui', 30, 400, 'data/img/sprite/poly.png', 3, 40),
(3, 'meat', 'rou', 500, 100, 'data/img/sprite/meat.png', 1, 100);
-- --------------------------------------------------------
创建此表时出错:
--
-- Table structure for table `join_quests_npcs`
--
CREATE TABLE IF NOT EXISTS `join_quests_npcs` (
`jqn_id` int(6) NOT NULL AUTO_INCREMENT,
`quest_id` int(6) NOT NULL,
`npc_id` int(6) NOT NULL,
PRIMARY KEY (`jqn_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=15 ;
编辑2:
所以我删除了join_quest_npcs
表创建以查看它是否仍会抱怨,现在它在下面的下一个块中再次出错...所以我认为它与gather_items
第一个表有所关联创建
#1064 - 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 'CREATE TABLE IF NOT EXISTS `levels` (
`level_id` int(11) NOT NULL,
`levelnam' at line 17
SQL块:
--
-- Table structure for table `levels`
--
CREATE TABLE IF NOT EXISTS `levels` (
`level_id` int(11) NOT NULL,
`levelname` varchar(255) NOT NULL,
`associatedQuestIDs` varchar(255) NOT NULL,
PRIMARY KEY (`level_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- Dumping data for table `levels`
--
INSERT INTO `levels` (`level_id`, `levelname`, `associatedQuestIDs`) VALUES
(1, 'mymap', '101 102 103'),
(2, 'mymap2', '201 202');
答案 0 :(得分:2)
找到它。问题来自第一个表创建:gather_items
,而不是MySQL抱怨的地方......
具体来说,它来自插入此行,其中包含utf-8特殊字符fàn
。重音标记打破了插入。
(1, 'rice', 'fàn', 60, 255, 'data/img/sprite/rice.png', 1, 10),
当我以纯文本fan
插入时,所有行都已正确插入。
我认为问题是因为即使我使用默认字符集= UTF8创建表
ENGINE=InnoDB DEFAULT CHARSET=utf8;
即使我在导入到utf8时指定我的字符集:
数据库导入脚本指定了char set latin1
:
CREATE DATABASE IF NOT EXISTS `my_test_db_2014` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
所以,我需要将我的脚本DEFAULT CHARACTER SET
更改为utf8
您还需要更改为latin1_swedish_ci
到utf8_general_ci
的正确排序规则,如下所示:http://dev.mysql.com/doc/refman/5.5/en/charset-charsets.html