无法在mysql中显示波兰字符

时间:2013-04-30 18:34:00

标签: mysql utf-8

这可能看起来像重复,但我一直在搜索数小时,并且没有针对类似问题的建议修复工作正在运行:

我在xls文件中有转换为CSV的文本。它包含波兰字符。我已经确认我确实保存为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)

我不能让那个拉丁语部分消失。我的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;

导入数据之前和之后都无济于事。我在这里缺少什么?

1 个答案:

答案 0 :(得分:0)

mysql_query('SET NAME utf8');

此查询应触发错误:

  

SQL错误(1193):未知的系统变量“NAME”

...但是你没有看到它,因为你没有测试mysql_query()是否成功。 The correct variable is NAMES