我正在尝试将this Hungarian text file导入MySQL表,但匈牙利字符总是被破坏。我已经尝试了很多编码,导入文件和表都找不到合适的组合。
文件格式是每行一个字和一个数字,用空格分隔。我的导入表有两列,varchar和integer。我正在使用MySQL 5.5.16和phpMyAdmin 3.4.5。 phpMyAdmin解决方案是首选,但我可以在必要时使用命令行。
提前致谢!
编辑:违反固定的链接
答案 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)编码为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编码,它必然会保留。
答案 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系统变量