2014-10-14 5 views
1

У меня возникла проблема, когда я пытаюсь выполнить оператор sql, который я сохранил в файле. Проблема в том, что специальные символы, такие как æøå, становятся тарабарщинами, когда они импортируются в базу данных.Проблемы с кодированием при импорте инструкции sql из файла

Я использую код ниже:

$dsn = 'mysql:host='.DBHOST.';dbname='.DBBASE; 
$db = new PDO($dsn, DBUSER, DBPASS); 
//$db->exec("set names 'utf8'"); 

$sql = "TRUNCATE TABLE wtm_meta_language"; 
$db->exec($sql); 

$sql = file_get_contents('language.sql'); 

$db->exec($sql); 

Файл language.sql кодируется в UTF-8 и поэтому база данных. Я попытался заставить соединение с базой данных использовать utf-8, добавив «set names» utf8 »в мой код (строка 3, теперь это комментарий), но когда я добавляю эту строку, ничего не импортируется вообще.

Надеюсь, у кого-то есть идея, как решить эту проблему.

+0

Это звучит как входной файл * не * UTF8. Можете ли вы описать, как вы установили, что файл на самом деле * является * UTF8? – RandomSeed

+1

Я использую Netbeans в качестве редактора для моего проекта и заявил, что все файлы должны быть UTF8. Теперь я открыл файл в Notepad ++, и здесь он говорит, что кодировка «UTF-8 без спецификации» – Mads

ответ

0

Ваши результаты не получаются, потому что вы не добавили charset = utf8.

$db = new PDO('mysql:host='.DBHOST.';dbname='.DBBASE.';charset=utf8', 'username', 'password'); 

, а затем оно должно позволить вам получить требуемый результат.

+0

Спасибо. Я попробую, когда вернусь домой с работы, а затем я отчитаюсь. – Mads

+0

Это сработало. Спасибо за помощь – Mads

+0

рад, что это сработало :) ..... –

0

Может быть, PHP не обнаруживает, что файл является UTF-8, поскольку, согласно вашему комментарию, спецификация отсутствует. Я нашел эту небольшую функцию here, которая должна заставить ее читать UTF-8.

function file_get_contents_utf8($fn) { 
    $opts = array( 
    'http' => array( 
     'method'=>"GET", 
     'header'=>"Content-Type: text/html; charset=utf-8" 
    ) 
); 
    $context = stream_context_create($opts); 
    $result = @file_get_contents($fn,false,$context); 
    return $result; 
} 

Кроме того, если бы я тебя, я бы использовал mysql_set_charset установить набор символов на соединении MySQL. Также я бы использовал SHOW VARIABLES LIKE 'character_set%';, чтобы посмотреть, что представляет собой текущий набор символов соединения.

+0

Спасибо. Я попробую, когда вернусь домой с работы, а затем я отчитаюсь. – Mads

Смежные вопросы