MySQL UTF8 Windows导出 - Linux导入

时间:2012-09-14 13:15:15

标签: mysql windows linux utf-8

我有安装WAMP的MySQL数据库版本5.1.36。我在Windows XP SP3上将其用于开发目的,并且其中包含一些数据, cyrillic ,并且所有这些表/列的排序规则都设置为utf8_general_ci

现在是时候将这个数据库转移到Debian Lenny的伪生产环境了。这里的MySQL版本是5.0.51a。

我尝试了以下内容:

  1. 我在Windows上使用来自 phpmyadmin 的数据导出了数据库,并将.sql文件保存为UTF8。
  2. 然后,我通过WinSCP(默认和二进制传输设置)将其传输到Linux机器。
  3. 我通过命令行创建了数据库:mysqladmin -u root -p create nbs
  4. 最后,我尝试创建表并填充数据:

    mysql -u root -p --default-character-set=utf8 nbs < NBS_utf8_1.sql

  5. 然而,这是我收到错误的地方,例如:

      

    第1行的错误1064(42000):您的SQL语法出错;检查与您的MySQL服务器版本对应的手册,以便在'附近使用正确的语法   CREATE TABLE IF NOT EXISTS `history_members` ( `id` int(11)NOT NULL AUTO_'在第1行

    我猜想有些东西搞乱编码......但不知道如何以及在哪里。我想在SO上读到的类似问题是文本传输的二进制模式只会将换行符CRLF更改为LF(不知道这是否正确......)。我在这里错过了什么?

    感谢。

2 个答案:

答案 0 :(得分:4)

对于这种特殊情况,问题通过以下修改得以解决:

1)我在创建目标数据库时将初始整理设置为utf8_general_ci
2)我通过WinSCP以文本模式传输文件,
3)我将SET NAMES 'utf8' COLLATE 'utf8_general_ci';添加到sql dump的顶部。

答案 1 :(得分:0)

以下是我使用PhpMyAdmin进行使用远程shell进行粗略SQL导入的内容:

 /*!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 utf8mb4 */;