为什么unicode不在我的MySQL表中工作?

时间:2011-05-06 12:44:36

标签: php mysql html unicode

我有一个MySQL数据库表,我存储地址,包括Norwegain地址。

CREATE TABLE IF NOT EXISTS `addresses` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `street1` varchar(50) COLLATE utf8_danish_ci NOT NULL,
  `street2` varchar(50) COLLATE utf8_danish_ci DEFAULT 'NULL',
  `zipcode` varchar(10) COLLATE NOT NULL,
  `city` varchar(30) COLLATE utf8_danish_ci NOT NULL,
  PRIMARY KEY (`id`),
  KEY `index_store` (`name`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_danish_ci;

现在,这张桌子很好,直到我搞砸了,并且意外地设置了所有城市='测试'。 Luckilly我有另一张名为helper_zipcode的桌子。此表包含挪威的alle zipcodes和城市。

所以我使用addresses的数据更新了helper_zipcode表。

不幸的是,在前端,像Bodø这样的城市现在显示为Bod� 所有æ ø å现在显示为� � �(但它们在数据库中看起来很好)。

我正在使用HTML 5,因此我的标题如下所示:

<!DOCTYPE HTML>
  <head> 
    <meta charset = "utf-8" />
  (...)

这不是我第一次与unicode斗争。

在DB中存储unicode字符(来自欧洲)并从DB中检索时显示相同的方法是什么?

3 个答案:

答案 0 :(得分:3)

来自mysql docs

  

5月2日发布者:lorenz pressler   2006 12:46 pm [删除] [编辑]

     

如果你   从你的mysql-db通过php获取数据   (所有utf-8)但仍然得到'?'   对于你的一些特殊人物   浏览器(<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />),试试这个:

     

mysql_connect()之后,和   mysql_select_db()添加以下行:   mysql_query("SET NAMES utf8");

     

为我工作。我先尝试过   utf8_encode,但这只适用于   äüöéè......等等,但不是   kyrillic和其他字符。

您的问题是存储在mysql中的数据还是使用php检索存储的数据?

答案 1 :(得分:1)

在查询之前(第一次)你必须添加mysql_query(“SET NAMES UTF8”);.

答案 2 :(得分:0)

如果您将浏览器编码从自动检测更改为UTF-8或Unicode,会发生什么?

我正在尝试确定数据库或Web浏览器是否错误。

可替换地。如果你有一个MySQL数据库的数据库工具,它会显示正确或错误的字符吗?