2016-12-17 118 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'”);尝试在连接到您的数据库后添加这些行。 –