2012-11-24 51 views
2

我使用下面的代碼來存儲和更新我的數據庫中的數據。特殊字符存儲爲?在我的MySQL數據庫

<?php 
header("Content-Type: text/html;charset=UTF-8", true); 
mysql_connect("localhost", "test", "test") or die(mysql_error()); 
    mysql_select_db("test") or die(mysql_error()); 

    // mysql_set_charset('UTF8'); 
    mysql_query("SET NAMES 'utf8'"); 
    mysql_query("SET CHARACTER SET utf8"); 
    mysql_query("SET COLLATION_CONNECTION = 'utf8_unicode_ci'"); 




    mysql_query("UPDATE `test`.`english` SET age = '".$age."', city = '".mysql_real_escape_string($_REQUEST['city'])."', aboutMe = '".$_REQUEST['about']."' WHERE `english`.`username` = '".$_REQUEST['username']."' LIMIT 1 ;") 
    or die(mysql_error()); 

該代碼運行良好。但是,如果字符串,例如「城市」包含一個ä,ö,ü它存儲爲? 因此,例如,「Bär」一詞轉到「B?r」。

我已經添加了這些utf8的東西,但它沒有幫助。 該服務器僅支持php4.x

編輯:數據庫正在使用latin1_general_ci作爲歸類。

+0

PHP版本不是這裏的問題,問題在於MySQL如何存儲這些值。 – ajacian81

+0

先試試這個查詢:'alter table'test'.'english' convert to character set utf8 collat​​e utf8_unicode_ci;' – ajacian81

+0

我試過了,但現在忽略了它,並且忽略了之後的字符。 – tobias

回答

0

使用UTF-8作爲對照,也許utf8_binutf8_unicode_ci

(詞意味着它不區分大小寫所以像「約翰」 comparsions =「約翰」返回true)。您可以通過在MySQL運行下面的查詢做到這一點:

alter table `test`.`english` convert to character set utf8 collate utf8_unicode_ci; 
+0

Thx,我試着把它改成utf8_unicode_ci,現在不存儲了。所以一個字「Bücken」 - >「B」。我只將排序規則添加到一行中! – tobias

0

變化表的排序規則utf8_bin

要改變,包括那些現有列的表的默認字符集和校對規則(注意轉換條款):

ALTER TABLE tableName CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin 

utf8_general_ci

ä = a 
ö = o 
ü = u 

utf8_bin

ä != a 
ö != o 
ü != u 
+0

utf8_general_ci是不支持擴展,縮小或可忽略字符的傳統歸類。它只能進行字符之間的一對一比較。 – ajacian81

+0

那麼我應該使用utf8_unicode_ci? – tobias

+0

奇怪的是。我有另一張表,其中有相同的排序規則latin1_general_ci,它適用於äüö,爲什麼? – tobias

0

保留ut8_unicode_ci並將其添加到你的PHP代碼:

mb_language('uni'); 
mb_internal_encoding('UTF-8'); 
mysql_query("set names 'utf8'",$connection); 

我用這無處不在(西里爾文,中國等),這是工作的每個查詢(插入或更新)。

<?php 
     header("Content-Type: text/html;charset=UTF-8", true); 
     $connection = mysql_connect("localhost", "test", "test") or die(mysql_error()); 

     mb_language('uni'); 
     mb_internal_encoding('UTF-8'); 
     mysql_query("set names 'utf8'",$connection); 

     mysql_select_db("test") or die(mysql_error()); 
     mysql_query("UPDATE `test`.`english` SET age = '".$age."', city = '".mysql_real_escape_string($_REQUEST['city'])."', aboutMe = '".$_REQUEST['about']."' WHERE `english`.`username` = '".$_REQUEST['username']."' LIMIT 1 ;") 
     or die(mysql_error()); 
+0

它也不起作用。 – tobias

+0

確保你的數據庫,你的表和你的專欄有utf8_general_ci整理和你的頁面也UTF8。 – pregmatch

+0

我如何確保所有這些? – tobias

0

我明白了。我沒有解釋這種行爲。 我在php文件改爲從UTF8到LATIN1:

mysql_query("SET NAMES 'latin1'"); 
mysql_query("SET CHARACTER SET latin1"); 
mysql_query("SET COLLATION_CONNECTION = 'latin1_general_ci'"); 

在MySQL數據庫的整理是utf8_unicode_ci的表和列。

它現在適用於€符號旁邊的所有字符。

相關問題