2016-11-20 101 views
1

我有一个包含阿拉伯语文本数据的大型文本文件。当我尝试将它加载到MySQL表中时,出现Error code 1300: invalid utf8 character string错误。这是我到目前为止已经试过:如何绕过mysql中无效的utf8字符串

LOAD DATA INFILE '/var/lib/mysql-files/text_file.txt' 
IGNORE INTO TABLE tblTest 
FIELDS TERMINATED BY '\t' 
LINES TERMINATED BY '\n'; 

我试图忽略这个错误,但它不工作。我试过LOCAL INFILE,但它也没有工作。我的数据库是使用DEFAULT CHAR SET UTF8DEFAULT COLLATE utf8_general_ci创建的。该文本文件编码为utf-8

我不想要包含无效utf8字符的记录。那么我怎样才能加载数据而忽略包含这些无效字符的记录呢?

提前致谢!

回答

2

这将有助于拥有顽皮角色的十六进制。

一种可能的方法来阅读所有文字,然后用任何坏字符处理:

  1. 读入VARBINARY型或BLOB的列。

  2. 循环遍历行,尝试复制到VARCHARTEXT列。

另一个计划是改为使用UTF8的utf8mb4。这可能是坏字符是表情符号或中文字符,可以在utf8mb4中运行,但不能在utf8中运行。

+0

在Python中,我捕获任何异常并决定在发生此类异常时执行的操作,例如, 'ValueError:continue'等等。但我不确定这种技术在MySQL中是否可用。 – Mohammed

+0

'更新:'我必须使用Python'chars = {c for c in textfile}'来检查文本文件中可用的所有字符。我发现了一些使用'regex'清​​理过的奇怪字符。之后,'MySQL load statement'可以很好的处理'utf-8'和'text'作为文本列的类型。非常感谢'Rick James'的帮助。我正在接受答复。 – Mohammed

1

当我尝试使用MySQL 5.7.14时,我也遇到了这个问题。

我返回到MySQL 5.6并且此问题消失

相关问题