【问题标题】:MySQL UTF8 Windows export - Linux importMySQL UTF8 Windows 导出 - Linux 导入
【发布时间】:2012-09-07 16:01:58
【问题描述】:

我有 MySQL 数据库版本 5.1.36,随 WAMP 安装一起提供。我在 Windows XP SP3 上将它用于开发目的,其中有一些数据,即 西里尔文,所有这些表/列的排序规则都设置为 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

但是,这是我得到错误的地方,例如:

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命令行程序不喜欢它们,因为它们通常不会出现在输入流中。

标签: mysql windows linux utf-8


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    这是我使用 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 */;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-26
      • 2011-09-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多