2014-05-22 77 views
1

我再次遇到將特殊字符保存到數據庫的問題。大量搜索後,我仍然無法找到解決方案,因此我正在開始一個新線程。立陶宛字符沒有正確保存到MySQL DB

我有MySQL數據庫使用UTF-8字符集和PHP應用程序從XML文件讀取數據到數據庫。早些時候,我遇到了愛沙尼亞人的問題,這是我設法解決的。例如& scaron; (š)在XML中是html實體& eth;它在PHP中轉換爲&#353 ;.在PHP腳本中,我運行mysql查詢「SET NAMES utf8」。 š正確保存到DB中。

現在我立陶宛人物的戰鬥,例如ų(&#371),這是因爲數字實體,&#371 ;,在XML文件中。我不在PHP中進行任何轉換,因爲我認爲當& eth;轉換爲š與scaron合作,不應該是ų保存到數據庫爲ų沒有PHP轉換?保存後出現在數據庫中作爲問號,如果我嘗試使用mb_convert_encoding()或html_entity_decode()結果是ų。

有什麼建議嗎?

回答

0

你應該確保你的表有正確的編碼,並在連接後立即運行SET名稱。

我準備了簡單的測試。嘗試運行它以確保一切正常。

1)創建數據庫testencoding和下面的代碼導入到它

CREATE TABLE IF NOT EXISTS `sample` (
`id` int(11) NOT NULL, 
    `value` varchar(255) COLLATE utf8_unicode_ci NOT NULL 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ; 

-- 
ALTER TABLE `sample` 
ADD PRIMARY KEY (`id`); 

2)具有以下內容創建簡單的PHP腳本並運行它:

<?php 

header('Content-Type: text/html; charset=utf-8'); 
mb_internal_encoding('utf-8'); 
$subjectvalue='&#371; ų'; 



$link = mysqli_connect("localhost","root","","testencoding"); 
mysqli_query($link,"SET NAMES 'utf8'"); 
mysqli_query($link,"INSERT INTO sample(`value`) VALUES('".mysqli_real_escape_string($link,$subjectvalue)."')"); 


$result = mysqli_query($link, "SELECT * FROM sample"); 
echo "<br /><br />Data from database<br /><br />"; 
while ($data = mysqli_fetch_assoc($result)) { 
    echo $data['id'].' '.$data['value']."<br />"; 
} 

3)在我的電腦的所有結果如預期:

從PHP文件輸出我有:

Data from database 

1 ų ų 

在phpMyAdmin我:

&#371; ų 

所以一切工作正常。試試看,並與我的結果比較