我已经在网上搜索了一个解决方案,而我在网上找到的解决方案在这里似乎都没有用。
我的问题是,我有一个MySQL转储(SQL文件),其中包含以UTF8编码保存的希伯来文本值,当我使用"source [file]“导入它时,它将希伯来字符保存为问号(?)。
现在,当我查看SQL文件(cat文件)时,我可以正确地看到希伯来字符。
即使我尝试从"cat“提供的输出复制和粘贴SQL命令到MySQL命令行,它也能工作。
只有当我使用"SOURCE [file]“(我需要它,因为它是一个巨大的文件)时,它才会失败。
我还尝试了以下几点:
mysql -uroot -p[pass] --default-character-set=utf8,然后是“设置名称utf8”,然后是“源文件”--给出问号。SET NAMES utf8“、"SET COLLATE utf8_bin”(这是DB中所有表的设置)--给出问号。CREATE DATABASE [db_name] DEFAULT CHARACTER SET UTF8 (上文第2节)-给出问号。mysql -uroot -p[pass] --default-character-set=utf8 [db_name] < [file.sql] -给出问号。set character_set_filesystem utf8,然后运行source [file] -给出问号。所有这些都不能正常工作,唯一起作用的是如果我直接从cat输出到mysql命令行执行copy+paste,由于文件的长度(几百MB),这不是一个选项。
帮帮忙,谢谢!
发布于 2015-06-07 11:52:30
将文件作为< file.sql读取时会出现问题。
正如关于使用MySQL in batch mode的文档中所述,如果您在Windows下运行mysql,并且在文件< file.sql中有一些特殊字符可能会导致问题,请使用以下方法:
mysql -e“file.sql”dbname .-默认-字符集=UTF8 8
发布于 2015-06-07 14:21:22
好的,我通过创建一个PHP“导入”脚本来解决这个问题。
首先,我将整个SQL文件分成两个文件: structure (创建表和结构的命令)和data。
然后,我使用structure.sql运行整个mysql_query文件,并获取数据文件,用"\n“来获取所有插入的分隔行,然后使用循环和mysql_query运行它们。
我甚至不需要包括“设置名称utf8",一旦我删除了这一行,一切都工作得很好。
我知道这不是一个理想的解决方案,但这是一个对我有效的解决方案。
https://stackoverflow.com/questions/30693050
复制相似问题