2013-02-13 37 views
1
$HotelName = "Adams’ Inn"; 
$ID = 1; 
$stmt = $sql->prepare("UPDATE coupons SET HotelName=? WHERE ID=?"); 
$stmt->bind_param("si",$HotelName,$ID); 
$stmt->execute(); 

輸出:Adams’酒店PHP的mysqli語句的Unicode炒

順便說一句,我有以下幾點:

字符集:UTF8

校對:utf8_general_ci

+0

當你說的輸出 - 你的數據庫與MySQL客戶端或重新顯示頁面上的數據看? – 2013-02-13 06:48:49

+0

是的,我在SQLYog上。 – 2013-02-13 06:50:57

回答

2

清單

  1. $sql->set_charset('utf8')權之後連接。
  2. header('Content-Type: text/html; charset=utf-8');任何輸出

之前有兩面參與 - 服務器和客戶端。客戶端意味着PHP腳本,而不是HTTP客戶端。服務器需要知道客戶期望的編碼。
而你只設置服務器端編碼,告訴mysql必須存儲哪些編碼數據。
但也有一個客戶端。

事實上,Mysql在重新編碼方面非常出色。只要一個編碼可以轉換成其他編碼,Mysql就可以做到這一點。例如,針對不同的客戶端。
現在沒有太多的要求,但這個功能存在。所以,Mysql需要知道客戶端支持哪種編碼。爲此目的存在set_charset()功能。

+0

以及' 2013-02-13 06:52:27

+0

,$ sql-> set_charset('utf8')正常工作! – 2013-02-13 06:53:31

+0

@你的常識所以我有問題。我已經設置字符集UT8創建表爲什麼它不工作?爲什麼我們仍然需要這個set_charset('utf8')? – 2013-02-13 07:03:06

0

您錯過了SET關鍵字在您的查詢中

$HotelName = "Adams’ Inn"; 
$ID = 1; 
$stmt = $sql->prepare("UPDATE coupons SET HotelName=? WHERE ID=?"); 
$stmt->bind_param("si",$HotelName,$ID); 
if($result=$stmt->execute()) 
    echo "Data Updated Sucessfully!!!"; 
else 
    echo "Error in Update"; 
+0

對不起,我有SET。我只是縮短了代碼。我將編輯我的Q. – 2013-02-13 06:52:19

-1

它如此簡單

只要把

mysqli_set_charset($db_connection, 'utf8'); 

數據庫連接後。

$con=mysqli_connect("localhost", "root", "xxxxx","database"); 
mysqli_set_charset($con, 'utf8'); 
+0

爲什麼有人下調了這個?事實上,這是正確的! – 2015-05-03 02:27:19