2010-07-14 131 views
2

嘿傢伙我有麻煩試圖轉換我的web應用程序來支持Unicode字符。我有以下腳本試圖插入俄羅斯字符到我的MySQL數據庫,但只輸出??????在我的MySQL數據庫字段。我已經在我的php.ini中將默認字符集更改爲UTF-8,並將我的表字段修改爲整理:utf8_unicode_ci。有人有主意嗎?將unicode字符插入mysql數據庫顯示???????在字段

mb_language('uni'); mb_internal_encoding('UTF-8'); 

       $sql = 'SET NAMES utf8'; 
$stmt = $conn->prepare($sql); 
$result=$stmt->execute(); 

$sql = 'SET CHARACTER SET utf8'; 
$stmt = $conn->prepare($sql); 
$result=$stmt->execute(); 

$sql = 'INSERT INTO topic (topic_id,topic_title) VALUES (?,?)'; 
$stmt6 = $conn->prepare($sql); 
$result=$stmt6->execute(array(0,"дравствуйте")); 
?> 

顯示創建表的編輯

CREATE TABLE `topic` (
`id` mediumint(8) NOT NULL AUTO_INCREMENT, 
    `topic_title` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, 

`description` mediumtext CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, 

PRIMARY KEY (`id`), 
FULLTEXT KEY `description` (`description`), 
FULLTEXT KEY `topic_title` (`topic_title`), 
FULLTEXT KEY `topic_title_2` (`topic_title`,`description`), 
FULLTEXT KEY `description_2` (`description`) 
) ENGINE=MyISAM AUTO_INCREMENT=39 DEFAULT CHARSET=latin1 
+0

你在哪裏看到問號? – Artefacto 2010-07-14 17:40:24

+0

在我正在嘗試插入字符的mysql數據庫的topic_title字段中。當我回應這些角色時,他們在php中表現出色。 – Scarface 2010-07-14 17:42:12

+0

困惑...您在MySql CLIENT中看到了問號,但數據是正確的unicode,並且在從數據庫查詢時通過PHP可以正確打印? – Fosco 2010-07-14 17:44:15

回答

1

我得到它的工作,通過使用以下sql alter database mydatabase charset = utf8;

0

通常情況下,(如果你引用文件也是UTF-8)的PHP MySQL的&一邊是OK,但HTTP/HTML事物的一面不是。

  • 您是否發送Content-Type: text/html;charset=utf-8標題?
  • HTML頁面上是否有<meta>元素聲明另一個字符集,然後聲明utf-8?

所以,查看詳細信息後:(?)在「正常」的PHP腳本它的工作原理我推測,在phpMyAdmin它不(應該使其更候選人爲superuser.com BTW) 。 PHPMyAdmin使用的版本會很好,但通常,PHPMyAdmin配置中的$cfg['DefaultCharset'] = 'utf-8';應該可以工作,如果非PHPMyAdmin腳本的其餘部分工作。如果沒有:更新到最新的PHPMyAdmin版本,如果仍然無法工作,請提交錯誤報告。

+0

我有meta元素,但是當你說頭,你如何修改你的http設置? – Scarface 2010-07-14 17:43:43

+0

'default_charset'設置通常應該這樣做,但不能傷害到雙重檢查(例如使用Firefox中的LiveHTTPHeaders)。 – Wrikken 2010-07-14 17:59:29

+0

看到創建表編輯 – Scarface 2010-07-14 18:51:13

0

如果您在mysql瀏覽器或mysql cli上看到那些??????,請確保您調整了程序上的字符集設置,即使這些條目正確添加到數據庫中,正確顯示它們也取決於客戶端字符集設置。

+0

這是真的,但他們沒有正確顯示在數據庫中,首先它是???????,然後我刪除了mb_functions和調用集名稱像馬克提到,現在它是Ð'рР°Ð²ÑÑ,вуйÑ,Ðμ在數據庫中 – Scarface 2010-07-14 17:52:59

0

我傾向於認爲問題不在於MySQL。

您正在輸入非ASCII字符串作爲文字到PHP腳本中。你確定「дравствуйте」字符串會以UTF-8編碼的形式發送到MySQL服務器嗎?

我在操作系統,PHP解釋器(它繼承了操作系統的默認設置),數據庫和開發工具(編碼)之間,使用PHP和MySQL的不兼容字符集配置, .php文件)。如果所有四個配置爲相同的編碼,它應該工作。

你說你的php.ini配置爲UTF-8。如果您的源php文件不是UTF-8,它將不起作用!因此,請檢查您的php文件是否編碼爲UTF-8,並且如果mysql客戶端也配置爲UTF-8。

一個常見的錯誤是忘記將MySQL客戶端配置爲UTF-8,並且由於MySQL客戶端應用程序的字符集問題而無法檢查數據庫上的數據。

首頁幫助!

+0

當我說show create database時,它聲明ENGINE = MyISAM AUTO_INCREMENT = 39 DEFAULT CHARSET = latin1,這可能是個問題嗎?當你提到將一個php文件轉換爲utf-8時,你究竟是什麼意思。再次感謝axmachado – Scarface 2010-07-14 19:32:49