将 utf-8 编码的文本加载到 MySQL 表中

Posted

技术标签:

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

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

【问题讨论】:

这是我的问题。对于某些字符,例如某些表情符号,您需要使用CHARACTER SET utf8mb4,如下所述:***.com/a/10959780/470749 【参考方案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

【讨论】:

以上是关于将 utf-8 编码的文本加载到 MySQL 表中的主要内容,如果未能解决你的问题,请参考以下文章

UTF-8编码熊猫数据帧到MySQL

怎么将sql文件加载到数据库

oracle 将文本文件中的数据加载到表中

PHP 和 Mysql UTF-8(特殊字符)的问题

如何使用 dir 简单地列出文件夹的所有文件到 UTF-8 编码的文本?

使用 oracle sql developer 将 utf-8 数据导出到文本文件