2013-03-14 67 views
0

我试图将this Hungarian text file导入到MySQL表中,但匈牙利字符总是被损坏。我已经尝试了许多编码导入文件和表都没有找到正确的组合。如何将此文件导入MySQL?

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

在此先感谢!

编辑:固定

+0

你可以看看前面提到的[SO解决方案](http://stackoverflow.com/questions/2763770/export-and-import-utf8-data-in-mysql-best-practices) – 2013-03-14 19:57:40

+0

谢谢,但它没有帮助。我尝试了很多UTF-8。 – 2013-03-14 20:14:28

+1

**需要更多信息。**“*字符总是被破坏*”是什么意思?你如何导入文件? 'mysqlimport'? 'LOAD DATA'?解析应用程序代码然后调用'INSERT'?当通过phpMyAdmin导入时,会有一个下拉框,通过该下拉框指定“文件的字符集”...是否正确设置了该字符集?插入文本的列的字符集是什么?你怎么确定插入过程中发生了腐败,而不是在检索过程中? – eggyal 2013-03-14 20:16:18

回答

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)被编码为0xc3b6,which 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。

+0

非常感谢!在我尝试解决方案之前,您能推荐如何在导入表中定义单词列吗?这与我使用的排序规则或其他属性无关吗? – 2013-03-15 18:00:20

+0

它工作。谢谢!我真的认为问题出在phpMyAdmin的导入插件上,因为我确定我已经用UTF-8试过了。从现在开始,我将使用命令行进行导入。再次感谢! (然后再次!) – 2013-03-15 18:47:02

0

上述损坏的链接尝试此解决方案一旦做到这一点,你可以使用这个文件使用load data infile加载到MySQL来文件转换为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的该字符集子句设置为文件的编码,因为它可以覆盖character_set_database系统变量

+0

那是什么语言? – 2013-03-14 23:10:13

+0

代码是在python中。 – 2013-03-15 05:23:59