首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql LOAD DATA INFILE失败,欧元符号为‘Euro’

mysql LOAD DATA INFILE失败,欧元符号为‘Euro’
EN

Stack Overflow用户
提问于 2013-06-20 18:54:37
回答 3查看 2.8K关注 0票数 0

我使用的是一个.csv文件中的php和mysql LOAD DATA INFILE

有些单元格包含'€'符号和数字,有些单元格包含'$'符号和数字,例如:2.13欧元,5.4美元

当我将csv文件加载到表格中时,带有'$'符号的单元格被正确插入,带有'€'的单元格是空的。

相关列的定义如下:

代码语言:javascript
复制
VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_general_ci

如何确保'€'标志正确插入?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-06-20 19:48:19

我转换了文件编码:

代码语言:javascript
复制
$data = file_get_contents(PATH_TO_CSV_FILE);
$data = mb_convert_encoding($data, 'UTF-8', 'Windows-1252');
file_put_contents(PATH_TO_MODIFIED_CSV_FILE, $data);

然后将其加载到表中:

代码语言:javascript
复制
LOAD DATA INFILE '".PATH_TO_MODIFIED_CSV_FILE."' INTO TABLE ...
票数 5
EN

Stack Overflow用户

发布于 2013-06-20 20:22:02

尝试:

代码语言:javascript
复制
LOAD DATA INFILE '".PATH_TO_CSV_FILE."' INTO TABLE tbl_name CHARACTER SET latin1

latin1对应于Windows-1252和CP-1252。

票数 2
EN

Stack Overflow用户

发布于 2014-01-12 23:19:15

如果有必要,我最终使用以下代码进行检测和转换:

代码语言:javascript
复制
<?php
# Detect and convert to utf-8
$data = file_get_contents($file_full_path);
if(mb_detect_encoding($str,"UTF-8, ISO-8859-1, Windows-1252") != "UTF-8") {
    $data = mb_convert_encoding($data, 'UTF-8', 'Windows-1252');
    file_put_contents($file_full_path, $data);
}

但是,如果您知道正在加载的文件的字符集是什么,那么就应该使用MySQL命令,就像它在the documentation中所说的那样

由character_set_database系统变量指示的字符集用于解释文件中的信息。集合名称和character_set_client的设置不会影响对输入的解释。如果输入文件的内容使用不同于缺省字符集的字符集,则通常更可取的做法是使用character子句指定文件的字符集,该子句在MySQL 5.1.17中提供。二进制字符集指定“无转换”。

使用以下sintax:

代码语言:javascript
复制
LOAD DATA  INFILE 'file_name' INTO TABLE tbl_name [CHARACTER SET charset_name]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17211822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档