如何绕过mysql中无效的utf8字符串

如何绕过mysql中无效的utf8字符串,mysql,utf-8,Mysql,Utf 8,我有一个包含阿拉伯语文本数据的大文本文件。当我尝试将它加载到MySQL表中时,我得到一个错误,错误代码是error code 1300:invalid utf8 character string。这就是我迄今为止所尝试的: LOAD DATA INFILE '/var/lib/mysql-files/text_file.txt' IGNORE INTO TABLE tblTest FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n'; 我试图忽略

我有一个包含阿拉伯语文本数据的大文本文件。当我尝试将它加载到MySQL表中时,我得到一个错误,错误代码是
error code 1300:invalid utf8 character string
。这就是我迄今为止所尝试的:

LOAD DATA INFILE '/var/lib/mysql-files/text_file.txt'
IGNORE INTO TABLE tblTest
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n';
我试图忽略这个错误,但它不起作用。我尝试了
localinfle
,但也没有成功。我的数据库是使用
DEFAULT CHAR SET UTF8
DEFAULT COLLATE UTF8\u general\u ci
创建的。文本文件是
utf-8
编码的

我不想要包含无效utf8字符的记录。那么,如何在忽略包含这些无效字符的记录的情况下加载数据呢


提前感谢

拥有调皮角色的十六进制会有帮助

阅读所有文本,然后处理任何错误字符的可能方法:

  • 读入
    VARBINARY
    BLOB
    类型的列

  • 循环行,尝试复制到
    VARCHAR
    TEXT

  • 另一个计划是使用utf8mb4而不是utf8。这可能是坏字符是一个表情符号或中文字符,将在utf8mb4工作,但不是utf8

    忽略错误

    这可能会让您忽略错误:

    SET @save := @@sql_mode;
    LOAD DATA ...;
    SET @@sql_mode := @save;
    

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


    我回到MySQL 5.6,这个问题在Python中消失了

    ,我捕获任何异常,并决定在发生此类异常时要执行的操作,例如,除ValueError外的
    :continue
    等等。但是我不确定MySQL中是否有这种技术。
    Update:
    我必须使用Python
    chars={c for c in textfile}
    检查文本文件中可用的所有字符。我发现了一些更奇怪的字符,它们已经用
    regex
    清理过了。在此之后,
    MySQL load语句
    utf-8
    text
    作为文本列的类型配合得很好。感谢
    Rick James
    对您的热情帮助。“我正在把答案标记为已被接受。”里克詹姆斯说。我非常尊重你,但你的回答毫无帮助。问题不在于坏角色。这是关于在导入时忽略坏字符的问题。@AuntJemima-指出了一点。我补充了我的答案。“在回顾
    sql\u模式时,我想知道他是不是在约会,或者是什么与阿拉伯语无关的事情。”里克詹姆斯说。非常感谢。它不起作用,但是谢谢。MySQL 5.7没有跳过坏字符的sql_模式,特殊术语
    IGNORE
    仍然抛出错误而不是警告,这也没有任何好处。在MySQL的未来版本中也是这样吗?您能提供详细信息吗?
    sql\u模式的价值是什么?