mysql - 奇怪的sql导入语法错误

标签 mysql import wamp

我正在将 MySQL 数据库从笔记本电脑重新导入到 PC。我导出了 WAMP MySQL .sql 文件,现在尝试将其导入到我的 PC 上。这在过去一直有效,从那以后我只改变了几个表......但现在我收到以下错误:

  #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 文件中提示的 block :

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表创建,看看它是否仍然会提示,现在它在下面的下一个 block 上再次出错......所以我认为它在某种程度上与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 block :

--
-- 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');

最佳答案

找到了。问题来自第一个表创建:gather_items,而不是来自 MySQL 提示的地方......

具体来说,是从这一行的插入开始,其中包含一个utf-8特殊字符fàn。重音符号破坏了插入。

(1, '米饭', 'fàn', 60, 255, 'data/img/sprite/rice.png', 1, 10),

当我以纯文本形式插入时,fan,所有行均已正确插入。

我认为问题是因为即使我使用默认 charset=UTF8 创建表

ENGINE=InnoDB DEFAULT CHARSET=utf8;

即使我在导入时指定了我的字符集到 utf8:

enter image description here

DB导入脚本指定的字符集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

关于mysql - 奇怪的sql导入语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26596432/

相关文章:

php - 在不使用 mysqli 的情况下使用 PHP 和 MySQL 准备语句

MySQL:如何在 mysql 命令行中导入 sql 转储?

python - Django 。导入应用模块

matlab - 无法使用 TextScan 在 Matlab 中一次导入所有值

php - 到 Controller 的 laravel 路由被调用两次

WAMP - 需要了解编译版本 VC6 或 VC9

mysql - 操作错误 : (1049, "Unknown database ' test_db_1 4'")

php - 如何在 LIMIT 子句中应用 bindValue 方法?

python - 处理对象而不是模块重新加载的最佳方法

PHP 刷新和 WAMP 服务器