将 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 表中的主要内容,如果未能解决你的问题,请参考以下文章