簡體   English   中英

特殊字符存儲為? 在我的mysql數據庫中

[英]Special characters are stored as ? in my mysql DB

我使用以下代碼在我的數據庫中存儲和更新數據。

<?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());  

該代碼運行良好。 但是,如果字符串(例如“ city”)包含ä,ö,ü,則會將其存儲為? 例如,單詞“Bär”轉到“ B?r”。

我已經添加了這些utf8內容,但無濟於事。 服務器僅支持php4.x

編輯:數據庫正在使用latin1_general_ci作為排序規則。

使用utf8作為排序規則,可能是utf8_binutf8_unicode_ci

(ci表示不區分大小寫,因此“ John” =“ JOHN”之類的比較將返回true)。 您可以通過在MySQL中運行以下查詢來執行此操作:

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

將表排序utf8_bin更改為utf8_bin

要更改表的默認字符集和排序規則,包括現有列的字符集和排序規則(請注意convert to子句):

ALTER TABLE tableName CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin

utf8_general_ci

ä = a
ö = o
ü = u

但在utf8_bin

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

保留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());  

我知道了 我對此行為沒有任何解釋。 我已經將php文件從utf8更改為latin1:

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

在MySQL DB中,表和列的排序規則是utf8_unicode_ci。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM