如何将此文件导入MySQL?

时间:2013-03-14 19:44:55

标签: mysql character-encoding mysqlimport

我正在尝试将this Hungarian text file导入MySQL表,但匈牙利字符总是被破坏。我已经尝试了很多编码,导入文件和表都找不到合适的组合。

文件格式是每行一个字和一个数字,用空格分隔。我的导入表有两列,varchar和integer。我正在使用MySQL 5.5.16和phpMyAdmin 3.4.5。 phpMyAdmin解决方案是首选,但我可以在必要时使用命令行。

提前致谢!

编辑:违反固定的链接

2 个答案:

答案 0 :(得分:1)

您的文件似乎以UTF-8编码。例如:

$ unzip -p hu_50K.zip | sed -n 59p | xxd
0000000: 6bc3 b673 7ac3 b66e c3b6 6d20 3532 3030  k..sz..n..m 5200
0000010: 310d 0a                                  1..

我理解“köszönöm”是“谢谢”的匈牙利语。如果这是文件的第59行应包含的内容,则ö字符(U + 00F6)编码为0xc3b6which is UTF-8。

使用LOAD DATA INFILE导入此文件:

LOAD DATA [LOCAL] INFILE '/path/to/hu_50K.txt'
    INTO TABLE my_table
    CHARACTER SET utf8
    FIELDS
        TERMINATED BY ' '
    LINES
        TERMINATED BY '\r\n'
    (col_word, col_number)

当然,col_word必须能够保存字符 - 如果它也以UTF-8编码,它必然会保留。

答案 1 :(得分:0)

尝试此解决方案将文件转换为utf-8

import codecs 
import commands 
f_loc = "my.file"
f_enc = commands.getoutput('file -b --mime-encoding %s' % f_loc)
 f_stream = codecs.open(f_loc, 'r', f_enc) 
f_out = codecs.open(f_loc+"b", 'w', 'utf-8') 
for l in f_stream: 
     f_output.write(l) 
 f_stream.close() 
 f_out.close()

完成此操作后,您可以使用此文件使用load data infile加载到mysql中。

还要确保LOAD DATA INFILE的CHARACTER SET子句设置为文件的编码,因为它可以覆盖character_set_database系统变量