【发布时间】:2012-09-07 16:01:58
【问题描述】:
我有 MySQL 数据库版本 5.1.36,随 WAMP 安装一起提供。我在 Windows XP SP3 上将它用于开发目的,其中有一些数据,即 西里尔文,所有这些表/列的排序规则都设置为 utf8_general_ci。
现在是时候将该数据库移至 Debian Lenny 上的伪生产环境了。这里的 MySQL 版本是 5.0.51a。
我尝试了以下方法:
- 我在 Windows 上使用来自 phpmyadmin 的数据导出了数据库,并将
.sql文件保存为 UTF8。 - 然后,我通过 WinSCP(具有默认和二进制传输设置)将其传输到 Linux 机器。
- 我通过命令行创建了数据库:
mysqladmin -u root -p create nbs -
最后,我尝试创建表格并填充数据:
mysql -u root -p --default-character-set=utf8 nbs < NBS_utf8_1.sql
但是,这是我得到错误的地方,例如:
ERROR 1064 (42000) at line 1:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在 ' 附近使用的正确语法 如果不存在则创建表
`history_members` ( `id`int(11) NOT NULL AUTO_' 在第 1 行
我想有些东西编码混乱了......但不知道如何以及在哪里。我想我在类似的问题中读到了 SO 文本传输的二进制模式只会将换行符 CRLF 更改为 LF(不知道这是否正确......)。我在这里想念什么?
谢谢。
【问题讨论】:
-
您的转储文件似乎包含一些无关字符。它是一个文本文件,因此不应使用二进制模式进行上传。
-
是的,当我在 PuTTY 控制台中使用
more显示它时,首先看到的是这个 ' 废话。我不知道它是怎么到那里的,但是当我用文本模式传输它时,它就消失了。 -
但是,这并不能解决问题,因为编码又搞砸了……
-
什么提示你编码搞砸了?
-
前几个字符可能是字节顺序标记:secure.wikimedia.org/wikipedia/en/wiki/Byte_order_mark。如果是这样,我猜mysql命令行程序不喜欢它们,因为它们通常不会出现在输入流中。