0

我正在尝试将此匈牙利文本文件导入 MySQL 表,但匈牙利字符总是损坏。我已经为导入文件和表尝试了许多编码,但没有找到正确的组合。

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

提前致谢!

编辑:上面固定的断开链接

4

2 回答 2

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) 被编码为0xc3b6UTF - 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-15T09:01:29.493 回答
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 系统变量

于 2013-03-14T20:56:35.997 回答