导入mysql 乱码问题及 Linux 中的文件格式转换

问题

下载了一个单词sql文件,导入mysql报错,查看文件类型:

% file english_word.sql
english_word.sql: Non-ISO extended-ASCII text

与另一个导入成功的文件对比,发现格式不一样:

% file english-root.sql
english-root.sql: UTF-8 Unicode text, with very long lines, with no line terminators

转换文件格式

  • 直接转换报错:iconv: 未知 41 处的非法输入序列

  • 参考[Linux 下文件Non-ISO extended-ASCII编码问题]( https://blog.csdn.net/niityzu/article/details/42494477#:~:text=使用如下命令转换: iconv -f CP850 -t UTF-8 SogouQ.mini >SogouQueryLog.txt ,Unicode%20English%20text%2C%20with%20very%20long%20lines%20%E7%94%B1%E7%BB%93%E6%9E%9C%E5%8F%AF%E7%9F%A5%EF%BC%9A%E8%BD%AC%E6%8D%A2%E6%88%90%E5%8A%9F%EF%BC%81)

    iconv -f 源格式 -t UTF-8 原来的文件 > 新的文件

  • 使用脚本查找适合的格式,只需要替换下面的english_word.sql:

    iconv --list | sed 's///$//' | sort > encodings.list

    for a in cat encodings.list; do
    printf "$a "
    iconv -f $a -t UTF-8 english_word.sql > /dev/null 2>&1 \
    && echo "ok: $a" || echo "fail: $a"
    done | tee result.txt

    执行后,cat result.txt | grep -v fail | less即是可用于转换的指定格式。

  • 为了转换得到正常显示中文的文件,需要在结果中进一步搜索GB格式

    % cat result.txt | grep -v fail | grep GB
    EBCDIC-CP-GB ok: EBCDIC-CP-GB
    GB13000 ok: GB13000
    GB18030 ok: GB18030
    GBK ok: GBK

  • 最终转换命令如下:

    iconv -f GB18030 -t UTF-8 english_word.sql > my.sql

  • 再次导入成功

    mysql> select * from EnWords limit 10;
    +----------+--------------------------------------------------------------------------------------------------------------+
    | word | explain |
    +----------+--------------------------------------------------------------------------------------------------------------+
    | a | n.(A)As 或 A's 安(ampere);(a) art.一;n.字母A /[军] Analog.Digital,模拟/数字 /(=account of) 帐上 |
    | aaal | American Academy of Arts and Letters 美国艺术和文学学会 |
    | aachen | 亚琛[德意志联邦共和国西部城市] |
    | aacs | Airways and Air Communications Service (美国)航路与航空通讯联络处 |
    | aah | [军]Armored Artillery Howitzer,装甲榴弹炮;[军]Advanced Attack Helicopter,先进攻击直升机 |
    | aal | ATM Adaptation Layer,ATM适应层 |
    | aapamoor | n.[生]丘泽,高低位镶嵌沼泽 |
    | aapss | American Academy of Political and Social Science 美国政治和社会科学研究院 |
    | aar | n.阿勒河(位于瑞士中部,亦作Aare) |
    | aardvark | n.[动]土豚 |
    +----------+--------------------------------------------------------------------------------------------------------------+

posted @ 2023-08-01 12:04  武平宁  阅读(223)  评论(0)    收藏  举报