我有一个将数据存储到mysql的html表单。使用特殊字符时(øæå), 它将字符正确地存储在数据库中。
当我使用脚本将mysql表保存到csv文件时,csv文件将不再显示正确的特殊字符。
有什么想法吗?
$conn = mysqli_connect($hostname, $user, $password, $database, $port);
if (mysqli_connect_errno()) {
die("Failed to connect to MySQL: " . mysqli_connect_error());
}
$csv_export = '';
$query = mysqli_query($conn, "SELECT * FROM ".$db_record);
$field = mysqli_field_count($conn);
for($i = 0; $i < $field; $i++) {
$csv_export.= mysqli_fetch_field_direct($query, $i)->name.';';
}
$csv_export.= '
';
while($row = mysqli_fetch_array($query)) {
for($i = 0; $i < $field; $i++) {
$csv_export.= '"'.$row[mysqli_fetch_field_direct($query, $i)->name].'";';
}
$csv_export.= '
';
}
header("Content-type: text/x-csv");
header("Content-Disposition: attachment; filename=".$csv_filename."");
echo($csv_export);
3条答案
按热度按时间wd2eg0qa1#
这个问题的解决方案是通过这样做来声明mysqli\u char\u集:mysqli\u set\u charset($conn,“utf8”);
pkbketx92#
如果没有任何症状,很难说哪几种修复方法是必要的。用utf-8字符查看故障;我看到的并不是我存储的可能症状列表,以及导致这些症状的原因。
通过加载时
LOAD DATA
,请确保将数据的字符集指定为语句的一部分。html表单的开头应该是
<form accept-charset="UTF-8">
.不要做任何事
ALTERs
直到你确认所选的语法是有用的,而不是让事情变得更糟。gywdnpxw3#
我假设将mysql保存为csv的脚本是在linux shell或windows命令提示符下运行的。问题可能是存储到数据库的数据使用的字符集和脚本使用的环境不同。
检查存储到数据库的数据格式或将其更改为utf-8:
并确保您的脚本环境使用相同的字符集。在UbuntuLinux上,在文件/etc/environment中添加以下行可能会起到作用(dau dk是丹麦的,只是根据角色的猜测,您需要将其设置为角色使用的一行):