我试图将this Hungarian text file导入到MySQL表中,但匈牙利字符总是被损坏。我已经尝试了许多编码导入文件和表都没有找到正确的组合。如何将此文件导入MySQL?
文件格式是每行一个单词和一个数字,用空格分隔。我的导入表有两列,varchar和integer。我正在使用MySQL 5.5.16和phpMyAdmin 3.4.5。 phpMyAdmin解决方案是首选,但我可以根据需要使用命令行。
在此先感谢!
编辑:固定
我试图将this Hungarian text file导入到MySQL表中,但匈牙利字符总是被损坏。我已经尝试了许多编码导入文件和表都没有找到正确的组合。如何将此文件导入MySQL?
文件格式是每行一个单词和一个数字,用空格分隔。我的导入表有两列,varchar和integer。我正在使用MySQL 5.5.16和phpMyAdmin 3.4.5。 phpMyAdmin解决方案是首选,但我可以根据需要使用命令行。
在此先感谢!
编辑:固定
你的文件中出现了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。
非常感谢!在我尝试解决方案之前,您能推荐如何在导入表中定义单词列吗?这与我使用的排序规则或其他属性无关吗? – 2013-03-15 18:00:20
它工作。谢谢!我真的认为问题出在phpMyAdmin的导入插件上,因为我确定我已经用UTF-8试过了。从现在开始,我将使用命令行进行导入。再次感谢! (然后再次!) – 2013-03-15 18:47:02
上述损坏的链接尝试此解决方案一旦做到这一点,你可以使用这个文件使用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系统变量
那是什么语言? – 2013-03-14 23:10:13
代码是在python中。 – 2013-03-15 05:23:59
你可以看看前面提到的[SO解决方案](http://stackoverflow.com/questions/2763770/export-and-import-utf8-data-in-mysql-best-practices) – 2013-03-14 19:57:40
谢谢,但它没有帮助。我尝试了很多UTF-8。 – 2013-03-14 20:14:28
**需要更多信息。**“*字符总是被破坏*”是什么意思?你如何导入文件? 'mysqlimport'? 'LOAD DATA'?解析应用程序代码然后调用'INSERT'?当通过phpMyAdmin导入时,会有一个下拉框,通过该下拉框指定“文件的字符集”...是否正确设置了该字符集?插入文本的列的字符集是什么?你怎么确定插入过程中发生了腐败,而不是在检索过程中? – eggyal 2013-03-14 20:16:18