2011-05-06 71 views
0

我有一个MySQL数据库表,我存储地址,包括Norwegain地址。为什么unicode不能在我的MySQL表中工作?

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的表。此表包含挪威的邮政编码和城市。

因此,我更新了addresses表,其中数据来自helper_zipcode

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

我使用HTML 5,所以我的头看起来像这样:

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

这已经不是我第一次和Unicode的斗争。

在数据库中存储unicode字符(来自欧洲)的seceret和从数据库中检索时显示相同的方式是什么?

+0

“helper_zipcode”表的字符集是什么? – Spudley 2011-05-06 12:48:10

+0

出于兴趣,如果您将浏览器编码从自动检测更改为UTF-8或Unicode,会发生什么情况?试图确定它的数据库或Web浏览器是否是错误的。 – 2011-05-06 12:49:35

+1

'SET NAMES utf8;'(或'mysql_set_charset()'或任何数据库库必须提供来定义连接的字符集)可能就是这样。 – 2011-05-06 12:59:22

回答

3
从MySQL docs

发布

洛伦茨普莱斯勒在5月2 2006年12:46 [删除] [编辑]

,如果你 从你的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检索存储的数据?

+0

实际上做到了。我将此添加到我的PDO连接'数组(PDO :: MYSQL_ATTR_INIT_COMMAND =>“SET NAMES utf8”)'。我也不得不升级到PHP v5.3,因为在早期版本中有一个错误使我无法使用它。 – Steven 2011-05-07 11:50:10

0

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

我试图确定它的数据库或Web浏览器是错误的。

或者,如果你的MySQL数据库有一个数据库工具,是否显示正确或错误的字符?

+0

没有名为'NVARCHAR'的数据类型。我发现的唯一引用是这个http://dev.mysql.com/doc/refman/5.0/en/string-type-overview.html。那么我在哪里做这个? – Steven 2011-05-06 12:54:08

+0

对不起,我误解了这个问题,尽管它是SQL服务器。 – 2011-05-06 12:55:11

1

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

相关问题