我有一个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数据库。导入过程失败,有以下错误:
/* 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文件的头:
# --------------------------------------------------------
# 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文件加载数据没有问题。
通过执行以下步骤,我想出了一个解决这个问题的丑陋方法:
我在这里错过了什么?
发布于 2011-04-20 09:48:12
您的编辑器可能在文件的开头插入了BOM“”。
这是您的编辑器的坏行为,因为BOMs在UTF-8编码中没有用处,它只在UTF-16或UTF-32中有用。然而,这种行为在几个编辑中似乎很常见。
或者,有一种方法可以指定您不希望文件中的BOM (例如,在Mac上的TextWrangler中,使用"UTF-8 no BOM“编码),或者您应该使用任何应用程序删除头两个字节.
https://serverfault.com/questions/261648
复制相似问题