这可能看起来像重复,但我一直在寻找几个小时,并且针对类似问题的建议修复都没有工作:
我在转换为 CSV 的 xls 文件中有文本。它包含波兰语字符。我已经确认我确实保存为 UTF8 编码。我无法访问此服务器上的 PHPMyAdmin,因此我将此 UTF8 编码的 CSV 文件上传到服务器。
然后我使用 UTF8 编码的 PHP 文件来加载数据库:
mb_language('uni');
mb_internal_encoding('UTF-8');
setlocale(LC_ALL, "pl_PL.UTF-8");
require_once('config.php');
mysql_set_charset('utf8');
$f=fopen('questions-final2.csv','r');
$questions=array();
while (($data = fgetcsv($f, 1000, ",")) !== FALSE) {
//$num = count($data);
//echo "<p> $num fields in line $row: <br /></p>\n";
print_r($data);
$questions[]=$data;
//mysql_query('INSERT INTO questions(question_id,text,answer_time,difficulty,mode) VALUES '.implode(',',$inserts));
//echo $data;
}
//exit();
// import of questions
$prev_index=0;
foreach($questions as $index=>$question){
if($index>0)
if($question[0]==$questions[$prev_index][0])
unset($questions[$index]);
else
$prev_index=$index;
}
mysql_query('SET CHARACTER SET utf8');
mysql_query('SET NAME utf8');
$res=mysql_query('SELECT * FROM questions');
$inserts=array();
foreach($questions as $question)
$inserts[]='("'.$question[5].'","'.addslashes($question[1]).'","'.$question[7].'","'.$question[0].'","'.$question[4].'")';
mysql_query('INSERT IGNORE INTO questions(question_id,text,answer_time,difficulty,mode) VALUES '.implode(',',$inserts));
var_dump(mysql_error());
fclose($f);
现在,这是数据库所说的:
mysql> show variables like 'character%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
我不能让那个 latin1 部分消失。我的 my.conf 看起来像这样:
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
collation-server = utf8_general_ci
init-connect='SET NAMES utf8'
character-set-server = utf8
default-character-set = utf8
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
我正在使用 putty 并确认我也将其设置为 utf8 编码,这是输出:
mysql> select text from questions limit 1;
+-------------------------------------------+
| text |
+-------------------------------------------+
| ?wi?to Unii Europejskiej obchodzone jest: |
+-------------------------------------------+
1 row in set (0.00 sec)
这是应该出现的原始文本:
Święto Unii Europejskiej obchodzone jest:
我也试过:
alter table questions modify column text TEXT character set utf8 collate utf8_unicode_ci;
和
alter table questions convert to character set utf8 collate utf8_unicode_ci;
在导入数据之前和之后都无济于事。我在这里想念什么?