2010-08-22 44 views
2

我有一个像这些在我们的网站特点:FémnyomóPHP和MySQL将不为Unicode

这是一个街道地址,在另一种语言中输入(虽然我不知道是哪个)。这里的DB设置:

mysql 4.1.2log 
charset cp1252 West European (latin1) 

我使用PHP,但没有mbstrings()(虽然我对这个地址的字符串转换,只是回声)。

如果我将mysql字符集从cp1252更改为UTF-8并确保我使用了诸如header('Content-Type: text/html; charset=UTF-8');之类的东西,那会改善我的情况吗?或者,数据是否因为它保存在cp1252字符集中而没有任何结果?原始数据库创建于2002年,自那以后一直使用/扩展。我们已经升级了服务器并重新导入了转储文件,但我很惭愧地承认我没有多加考虑。

如果我被弄坏了,我可能会删除那些字段中的文本,但我希望支持unicode前进,所以如果我发出ALTER database_name DEFAULT CHARACTER SET utf8;会确保未来的多字节编码被正确保存,等式中存储量最少(让我担心PHP)?

谢谢 -

回答

1

1)转换所有字符集为UTF8:

ALTER database_name DEFAULT CHARACTER SET utf8; 

2)发出此页面上的任何查询之前:

mysql_query("set names 'utf8'"); 

3)使用此头:

header('Content-Type: text/html; charset=UTF-8'); 

4)插入此meta标签:

<meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/> 

5)此外,阅读这样的:http://www.oreillynet.com/onlamp/blog/2006/01/turning_mysql_data_in_latin1_t.html

+0

感谢。我已经完成了所有5个步骤,但仍然得到相同的结果。为了消除可能性,我连接到本地主机上的mysql监视器(此框正在运行MySQL 5.1.41-3ubuntu12.3-log),并将它们设置为utf8(使用'show variables'反映) - character_set_client,character_set_connection,character_set_database ,character_set_results,character_set_server,character_set_system。结果是一样的 - 这是直接从MySQL监视器:FAN©mnyomó³1 – Hans 2010-08-22 09:33:54

+0

在步骤5中的链接可能最终会成为我所做的。我可能只需要通过这些地址并手动更改它们(将所有内容转换为UTF-8后)。在将数据库转换为UTF-8之后,是否有任何危险,我最终会使用旧版latin1字符集中的这些字符? – Hans 2010-08-22 09:35:23

+1

对于您提到的危险,请备份数据库。如果你搞砸了任何东西,你可以恢复。 – shamittomar 2010-08-22 09:45:37