【问题标题】:Mysql "SOURCE <file>" importing of UTF8 dump gives question marksUTF8转储的Mysql“SOURCE <file>”导入给出问号
【发布时间】:2015-06-07 11:36:13
【问题描述】:

我在网上搜索了一个解决方案,但我在网上找到的解决方案似乎都不起作用。

我的问题是我有一个 MySQL 转储(SQL 文件),其中包含以 UTF8 编码保存的希伯来文本值,当我使用“source [file]”导入它时,它会将希伯来字符保存为问号(??? )。

现在,当我查看 SQL 文件(cat [file])时,我可以正确看到希伯来语字符。

即使我尝试将“cat”直接提供的输出中的 SQL 命令复制并粘贴到 MySQL 命令行中,它也能正常工作。

只有当我使用“SOURCE [file]”时它才会失败(我需要它,因为它是一个巨大的文件)。

我还尝试了以下方法:

  1. mysql -uroot -p[pass] --default-character-set=utf8,然后是 "SET NAMES utf8",然后是 "SOURCE [file]" - 给出问号。
  2. 登录 mysql 客户端,然后执行“SET NAMES utf8”、“SET COLLATE utf8_bin”(这是数据库中所有表的设置)- 给出问号。
  3. CREATE DATABASE [db_name] DEFAULT CHARACTER SET UTF8 使用之前的设置(上面的第 2 部分)- 给出问号。
  4. mysql -uroot -p[pass] --default-character-set=utf8 [db_name] &lt; [file.sql] - 给出问号。
  5. set character_set_filesystem utf8 然后运行 ​​source [file] - 给出问号。

这些都不能正常工作,唯一有效的是如果我直接从 cat 的输出复制+粘贴到 mysql 命令行,由于文件的长度(数百 MB),这不是一个选项。

请帮忙,谢谢!

【问题讨论】:

  • 您在创建数据库时是如何设置它的排序规则的?
  • ALTER TABLE [dbname] COLLATE 'utf8_bin'。我也试过这个,也没有帮助。我实际上并不认为它真的是一个数据库问题,而是更多关于使用“SOURCE”时数据如何传输的问题。因为直接复制和粘贴有效。
  • SHOW VARIABLES LIKE 'character\_set\_%'; 也许你应该看看这个confluence.atlassian.com/display/CONFKB/…

标签: mysql sql utf-8 import


【解决方案1】:

将文件读取为&lt; file.sql 时会出现问题。

正如有关使用 MySQL in batch mode 的记录 如果您在 Windows 下运行 mysql 并且文件 &lt; file.sql 中有一些特殊字符可能会导致问题,请改用:

mysql -e "source file.sql" dbname ... --default-character-set=UTF8

【讨论】:

    【解决方案2】:

    好的,我设法通过创建一个 PHP“导入”脚本来解决这个问题。

    首先,我将整个 SQL 文件拆分为两个文件:结构(创建表和结构的命令)和数据。

    然后,我只是使用 mysql_query 运行整个 structure.sql 文件,并获取数据文件,将其分解为“\n”以获取所有 INSERT 的单独行,然后使用循环和 mysql_query 运行它们。

    我什至不需要包含“SET NAMES utf8”,一旦我删除了这条线,一切都很好。

    我知道这不是一个理想的解决方案,但它对我有用。

    【讨论】:

      猜你喜欢
      • 2012-09-07
      • 1970-01-01
      • 1970-01-01
      • 2020-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-27
      • 1970-01-01
      相关资源
      最近更新 更多