2016-12-17 161 views
1

我有一個使用MySQL數據庫的Wordpress網站。我想在我的數據庫中放一個希臘字(Ἀπὸ)。 (請注意,它在Stack Overflow接口中呈現的效果很好。)如果我這樣做,它會進入表格並且在Sequel Pro中呈現得很好。然而,當我使用一些PHP將其從表格中讀出並將其添加到我的Wordpress網站上的頁面時,它會呈現???而不是Ἀπὸ。但是,如果我直接將該詞添加到Wordpress界面中的頁面,則會在界面和呈現的頁面上顯示希臘字符。我看看顯示的頁面?我看到下面這行:Wrangling希臘字符

<meta charset='utf-8'> 

我相信應該只需要渲染這些希臘字符。我錯過了什麼?

編輯

因爲有人問它:

CREATE TABLE `scripture` (
    `id` int(6) unsigned NOT NULL AUTO_INCREMENT, 
    `translation` varchar(4) COLLATE utf8_unicode_ci NOT NULL DEFAULT '', 
    `content` varchar(1200) COLLATE utf8_unicode_ci NOT NULL DEFAULT '', 
    `book` varchar(20) COLLATE utf8_unicode_ci NOT NULL DEFAULT '', 
    `chapter` int(3) NOT NULL, 
    `verse` varchar(7) COLLATE utf8_unicode_ci NOT NULL DEFAULT '', 
    `first_verse` int(3) DEFAULT NULL, 
    `topic` varchar(200) COLLATE utf8_unicode_ci NOT NULL DEFAULT '', 
    `related1` int(6) DEFAULT NULL, 
    `related2` int(6) DEFAULT NULL, 
    `related3` int(6) DEFAULT NULL, 
    `related4` int(6) DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    KEY `book_chapter_verse_translation` (`book`,`chapter`,`verse`,`translation`), 
    KEY `translation_book_chapter_first_verse` (`translation`,`book`,`chapter`,`first_verse`) 
) ENGINE=InnoDB AUTO_INCREMENT=1129 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci 

character_set_client utf8 
character_set_connection utf8 
character_set_database utf8 
character_set_filesystem binary 
character_set_results utf8 
character_set_server latin1 
character_set_system utf8 
character_sets_dir /rdsdbbin/mysel-5.6.23.R1/share/charsets/ 

的wp-config.php文件有以下幾點:

/** Database Charset to use in creating database tables. */ 
define('DB_CHARSET', 'utf8'); 

/** The Database Collate type. Don't change this if in doubt. */ 
define('DB_COLLATE', ''); 

我曾嘗試評論出來,我曾嘗試使DB_COLLATE = utf8_unicode_ci

第二個編輯

解決的辦法是提前查詢添加以下PHP代碼:

$mysqli->set_charset("utf8"); 
+1

什麼是數據庫和Wordpress表的數據庫整理? http://stackoverflow.com/questions/341273/what-does-character-set-and-collat​​ion-mean-exactly – markratledge

+0

所以,你的意思是「字符」,而不是「字體」 – Strawberry

+0

數據庫的字符集是UTF- 8 Unicode和排序規則是utf8_unicode_ci。 –

回答

1

this,尋找「問號」。

特別是,它表明,這些都是有可能的事情來檢查:

  • 要存儲的字節沒有編碼爲UTF8/utf8mb4。解決這個問題。
  • 數據庫中的列是CHARACTER SET utf8(或utf8mb4)。解決這個問題。
  • 另外,檢查讀取期間的連接是否爲UTF-8。

存儲數據時發生問題;數據丟失。這可以通過做SELECT HEX(col)...來確認 - 它將全部爲3F,十六進制爲?

如果仍有問題,請提供SHOW CREATE TABLESHOW VARIABLES LIKE 'char%'和連接參數。

+0

存儲的字節編碼爲utf8。 該列設置爲CHARACTER SET utf8。 我不知道如何「檢查讀取過程中的連接是UTF-8」,而不是上面提到的元標記。 我做了一個SELECT HEX(COL),它沒有顯示3F。 順便說一句,我試着手動將希臘文本添加到呈現數據庫中某些內容的同一頁面上。手動添加的文本正確呈現,而數據庫派生的文本則不會。 –

+0

看看SHOW CREATE TABLE和SHOW CREATE DATABASE向我展示了我期望看到的內容。然而SHOW VARIABLES LIKE'char%'顯示了一些潛在的問題:character_set_database = latin1和character_set_server = latin1。 –

+0

數據庫設置僅僅是新表的默認值。 –

1

特殊字符或希臘詞可以用以下未成年人 變化被保存在數據庫:

  • 變化DB字符集和校對規則爲utf8

的mysql_query( 「集名稱 'UTF8'」 );

的mysql_query( 「SET CHARACTER SET 'utf-8'」)

  • 更改字符列設置爲UTF-8 「EXP:utf8_general_ci」
  • 更改你插入和更新查詢和補充資本金 「N」在值的前面。

經驗:

INSERT INTO table_name field1, field2 VALUES(N'value1', N'value2'); 

這將保存所有特殊字符不作任何修改或編碼。

+0

真的幫了我很多幹杯:-) – Ashish

+0

這個您在此處介紹的新功能是在插入或更新時在值的前面添加「N」。唉,我仍然結束了?在頁面上呈現。請記住,數據已被準確保存在數據庫中。 –

+1

mysql_query(「SET NAMES'utf8'」); mysql_query(「SET CHARACTER SET'utf8'」);嘗試在連接到您的數據庫後添加這些行。 –