Mysql&#34; SOURCE <file>&#34;导入UTF8转储会产生问号

时间:2015-06-07 11:36:13

标签: mysql sql utf-8 import

我在线搜索了一个解决方案,我在网上找到的解决方案似乎都没有。

我的问题是我有一个MySQL转储(SQL文件),其中包含以UTF8编码保存的希伯来文本值,当我使用&#34; maven-shade-plugin&#34;它将希伯来字符保存为问号(???)。

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

即使我试图复制&amp;粘贴输出中的SQL命令&#34; source [file]&#34;直接进入MySQL命令行,它也可以。

只有当我使用&#34; cat&#34; (我需要,因为它是一个巨大的文件)。

我也尝试了以下内容:

  1. SOURCE [file],然后&#34; SET NAMES utf8&#34;然后&#34; SOURCE [file]&#34; - 给出问号。
  2. 登录mysql客户端,然后执行&#34; mysql -uroot -p[pass] --default-character-set=utf8&#34;,&#34; SET NAMES utf8&#34; (这是数据库中所有表格的设置) - 给出问号。
  3. SET COLLATE utf8_bin使用之前的设置(上面第2部分) - 给出问号。
  4. CREATE DATABASE [db_name] DEFAULT CHARACTER SET UTF8 - 给出问号。
  5. mysql -uroot -p[pass] --default-character-set=utf8 [db_name] < [file.sql]然后运行set character_set_filesystem utf8 - 给出问号。
  6. 这些都没有正常工作,唯一有效的方法是,如果我直接从cat的输出复制+粘贴到mysql命令行,由于文件的长度,这不是一个选项(数百个MB)。

    请帮助,谢谢!

2 个答案:

答案 0 :(得分:0)

将文件读作< file.sql会有问题。

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

  

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

答案 1 :(得分:0)

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

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

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

我甚至不需要包含“SET NAMES utf8”,一旦我删除了这一行,一切都运行得很好。

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