首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从SQL文件导入数据时的SQL错误(1064)

从SQL文件导入数据时的SQL错误(1064)
EN

Server Fault用户
提问于 2011-04-20 09:30:33
回答 1查看 3.5K关注 0票数 0

我有一个MySQL数据库,它最初是用默认的latin1字符集和latin1_swedish_ci排序规则设置的。我一直像这样使用这个数据库,直到我在我的生产网站上注意到奇怪的字符,这个网站是由我的开发机器导出的数据库驱动的。

此时,我将数据库和表的默认字符集更改为utf8,将排序规则更改为utf8_unicode_ci,将每个表中的latin1数据转换为utf8 (使用“转换数据”选项),并使用HeidiSQL将数据库导出为单个SQL文件。

在Notepad++中打开生成的SQL文件时,会错误地呈现多个字符。例如,en虚线(-)显示为–,e带重音(é)显示为é

我将文件的编码从ANSI更改为UTF-8 (使用Notepad++中的编码菜单选项),并正确地呈现违规字符。我保存了新的utf8 8编码的SQL文件,并试图将内容导入生产服务器上的MySQL数据库。导入过程失败,有以下错误:

代码语言:javascript
复制
/* SQL Error (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 '?# -------------------------------------------------------- # Host: ' at line 1 */
/* Error with snippets directory: The specified path was not found */

SQL文件的头:

代码语言:javascript
复制
# --------------------------------------------------------
# Host: 127.0.0.1
# Server version: 5.1.33-community
# Server OS: Win32
# HeidiSQL version: 6.0.0.3773
# Date/time: 2011-04-20 09:48:36
# --------------------------------------------------------

它会阻塞文件的第一行,并将其注释掉。为什么会发生这种情况?在更改字符集和数据库排序规则之前,从SQL文件加载数据没有问题。

通过执行以下步骤,我想出了一个解决这个问题的丑陋方法:

  • 使用HeidiSQL将数据库导出为单个SQL文件
  • 在Notepad++中打开结果文件并从ANSI转换为UTF-8编码。
  • 在Notepad++中创建新的空文件,粘贴在UTF-8中,并正常保存文件。

我在这里错过了什么?

EN

回答 1

Server Fault用户

回答已采纳

发布于 2011-04-20 09:48:12

您的编辑器可能在文件的开头插入了BOM“”。

这是您的编辑器的坏行为,因为BOMs在UTF-8编码中没有用处,它只在UTF-16或UTF-32中有用。然而,这种行为在几个编辑中似乎很常见。

或者,有一种方法可以指定您不希望文件中的BOM (例如,在Mac上的TextWrangler中,使用"UTF-8 no BOM“编码),或者您应该使用任何应用程序删除头两个字节.

票数 3
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/261648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档