【问题标题】:Loading utf-8 encoded text into MySQL table将 utf-8 编码的文本加载到 MySQL 表中
【发布时间】:2011-06-24 21:08:18
【问题描述】:

我有一个大的 CSV 文件,我将把它加载到 MySQL 表中。但是,这些数据被编码为 utf-8 格式,因为它们包含一些非英文字符。 我已经将表中对应列的字符集设置为utf-8。但是当我加载我的文件时。非英语字符变成奇怪的字符(当我在我的表格行上进行选择时)。在将数据加载到表中之前,我是否需要对数据进行编码?如果是,我该怎么做。我正在使用 Python 加载数据并使用 LOAD DATA LOCAL INFILE 命令。 谢谢

【问题讨论】:

标签: mysql utf-8 decode encode


【解决方案1】:

http://dev.mysql.com/doc/refman/5.1/en/load-data.html 中所说, 您可以使用 LOAD DATA LOCAL INFILE 的“CHARACTER SET”可选参数指定 CSV 文件使用的字符集

【讨论】:

  • 这并不是说mysql错误地使用了另一个字符集,不管你设置了什么列字符集!
【解决方案2】:

你应该发送

init_command = 'SET NAMES UTF8'
use_unicode = True
charset = 'utf8'

在做 MySQLdb.connect() 时 例如

dbconfig = {}
dbconfig['host']            = 'localhost'
dbconfig['user']            = ''
dbconfig['passwd']          = ''
dbconfig['db']              = ''
dbconfig['init_command']    = 'SET NAMES UTF8'
dbconfig['use_unicode']     = True
dbconfig['charset']         = 'utf8'

conn = MySQLdb.connect(**dbconfig)

编辑:啊,对不起,我看到你已经补充说你正在使用“LOAD DATA LOCAL INFILE”——这在你最初的问题中并不清楚:)

【讨论】:

  • 这是特定于编程语言的。
  • @miyalys -- 是的,它是问题中指定的python……你对此投反对票了吗?!
  • ...是的。我试图撤消它,但遗憾的是,该网站阻止我在编辑答案之前更改投票。因此,如果您在某个时候以某种方式对其进行了编辑,请告诉我,然后我会撤消它。
【解决方案3】:

试试

LOAD DATA INFILE 'file'
IGNORE INTO TABLE table
CHARACTER SET UTF8
FIELDS TERMINATED BY ';'
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'

【讨论】:

  • 添加“CHARACTER SET UTF8”是关键!
  • 天哪,花了我这么长时间。尝试了一切,它只是不断地将 utf8 转换为拉丁文并将其导入到 utf 8 表中。编码选项产生了奇迹。
  • 基本上是mysql的错误,直到最新版本,包括MariaDb。如果表或列是 UTF8,则需要自动获取正确的值。好吧它没有,你需要指定它并希望你没有混合表。
【解决方案4】:

不需要对文件中的字符进行编码,但在将此文件加载到数据库之前,您需要确保文件以 UTF-8 编码。

【讨论】:

    【解决方案5】:

    试试类似的,

    加载数据本地INFILE“文件” INTO TABLE message_history 字符集 UTF8 以“|”结尾的列 可选地由 '"' 包围 由'"'转义;

    原始结构,

    https://dev.mysql.com/doc/refman/8.0/en/load-data.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-30
      • 2019-08-16
      • 2014-04-09
      • 2017-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多