2011-05-06 30 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」);.

相關問題