2013-01-22 40 views
7

該cookie使用big5集進行編碼,並且無法插入到MySQL中。你能幫我解決這個問題嗎?無法將中文字符插入到MySQL中

Fields:username is eng,date1 is date,reason1是一個漢字。

$reason1 = $_COOKIE["reason"]; 
$sql2="INSERT INTO 
    attendance_count(username,date,count_time,appendix) 
    VALUES ('$username','$date1','0','$reason1')"; 
mysql_query($sql2); 
+0

什麼是確切的錯誤信息?使用'mysqli_error()'得到它。另外最好使用新的mysqli函數,因爲舊的mysql函數將被棄用。 – Tuim

+4

[SQL注入讀到它...](http://en.wikipedia.org/wiki/SQL_injection) – PeeHaa

+0

是啊,該網站將不會持續在野外一小時。 –

回答

22

使用UTF-8當您創建表。

create table table_name() CHARACTER SET = utf8;

使用UTF-8當您插入到表

set username utf8; INSERT INTO table_name (ABC,VAL);

Read More

And More

詳細代碼

下面的代碼是測試代碼,請執行以下操作。

如果您已經創建了數據庫,請將其修改爲以下代碼。 如果你沒有創建數據庫,然後創建並設置整理到utf8_unicode_ci

而同爲表定義的排序規則「utf8_unicode_ci」爲要在其中存儲。中國字符表中的字段。

ALTER DATABASE `stackoverflow` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci; 

CREATE TABLE `stackoverflow`.`chines` 
(
    `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , 
    `words` VARCHAR(200) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL 
) ENGINE = InnoDB;
<?php 

    define('HOSTNAME', 'localhost'); 
    define('USERNAME', 'root'); 
    define('PASSWORD', ''); 
    define('DATABASE', 'stackoverflow'); 

    $dbLink = mysql_connect(HOSTNAME, USERNAME, PASSWORD)or die(mysql_error()); 
    mysql_query("SET character_set_results=utf8", $dbLink)or die(mysql_error()); 
    mb_language('uni'); 
    mb_internal_encoding('UTF-8'); 
    mysql_select_db(DATABASE, $dbLink)or die(mysql_error()); 
    mysql_query("set names 'utf8'",$dbLink)or die(mysql_error()); 

    if(isset($_POST['addWord'])) 
    { 
     mysql_query("SET character_set_client=utf8", $dbLink)or die(mysql_error()); 
     mysql_query("SET character_set_connection=utf8", $dbLink)or die(mysql_error()); 

     $sql_query = "INSERT INTO chines(words) VALUES('".$_POST['words']."')"; 
     mysql_query($sql_query, $dbLink)or die(mysql_error()); 
    } 

?> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> 
<head> 
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" /> 
    <title></title> 
</head> 
<body> 
    <?php 
     mysql_query("SET character_set_results=utf8", $dbLink); 
     $sql_query = "SELECT * FROM chines"; 
     $dbResult = mysql_query($sql_query, $dbLink)or die(mysql_error()); 

    ?> 

    <form action="" method="post"> 

     <p>Word : <input type="text" name="words" /></p> 
     <p><input type="submit" name="addWord" /></p> 

    </form> 
    <?php 
     while($row = mysql_fetch_assoc($dbResult)) 
     { 
      echo $row['words']. '<br />'; 
     } 
    ?> 
</body> 
</html>

看到結果和下面的步驟視覺。

enter image description here

+0

如何設置用戶名UTF8 – user1902899

+0

mysqli_query( 「SET character_set_results = UTF8」,$分貝); –

+0

或者你可以通過phpmyadmin的alter table字段來完成它,並將類型設置爲UTF-8 ...示例.. ALTER TABLE t MODIFY col1 CHAR(50)CHARACTER SET utf8; –

0

對於中國,你真的需要utf8mb4,不utf8。這是因爲少數中文字符需要4字節的UTF8字符,而MySQL的utf8不支持。

+0

mysql說'(1115,「未知字符集:'utf8mb4'」)',mysql-v5.1.71這裏。 – CodyChan

+1

然後你必須更新到至少5.5。 (5.5.3是當utf8mb4變得可用時 - 大約十年前)。 –

0

真正的問題是關於被編碼的cookie big5?數據的其餘部分在客戶端中編碼爲utf8?如果「是」既......

更改連接是big5,做餅乾的INSERT/SELECT,然後(在升級之後,或者更好,utf8mb4)改回UTF8。

執行SET NAMES big5或調用您正在使用的API的charset('big5')函數是來回切換的首選方式。

(同時,您可以通過mysql_*接口離開;切換到mysqli_*PDO

如果一切都在客戶端big5,那麼就沒有必要來回切換。只需聲明客戶端正在使用big5。注意:表/列是否也是big5並不重要; MySQL將在它們之間進行轉換。表列的

0

更新字符集,以及使用UTF8與表字符集一起。可以在Mysql workbench alter table中查看並查看想要支持中文字符的字符集。