我在线搜索了一个解决方案,我在网上找到的解决方案似乎都没有。
我的问题是我有一个MySQL转储(SQL文件),其中包含以UTF8编码保存的希伯来文本值,当我使用" maven-shade-plugin
"它将希伯来字符保存为问号(???)。
现在,当我查看SQL文件(cat [file])时,我可以正确地看到希伯来字符。
即使我试图复制&粘贴输出中的SQL命令" source [file]
"直接进入MySQL命令行,它也可以。
只有当我使用" cat
" (我需要,因为它是一个巨大的文件)。
我也尝试了以下内容:
SOURCE [file]
,然后" SET NAMES utf8"然后" SOURCE [file]" - 给出问号。mysql -uroot -p[pass] --default-character-set=utf8
"," SET NAMES utf8
" (这是数据库中所有表格的设置) - 给出问号。SET COLLATE utf8_bin
使用之前的设置(上面第2部分) - 给出问号。CREATE DATABASE [db_name] DEFAULT CHARACTER SET UTF8
- 给出问号。mysql -uroot -p[pass] --default-character-set=utf8 [db_name] < [file.sql]
然后运行set character_set_filesystem utf8
- 给出问号。 这些都没有正常工作,唯一有效的方法是,如果我直接从cat的输出复制+粘贴到mysql命令行,由于文件的长度,这不是一个选项(数百个MB)。
请帮助,谢谢!
答案 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”,一旦我删除了这一行,一切都运行得很好。
我知道这不是一个理想的解决方案,但它对我有用。