2013-01-22 16 views
7

Il cookie viene codificato utilizzando il set big5 e non può essere inserito in MySQL. Potresti aiutarmi a risolvere questo problema?Impossibile inserire il carattere cinese in MySQL

Campi: username è eng, date1 data, reason1 è un carattere cinese.

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

Qual è l'esatto messaggio di errore? usa 'mysqli_error()' per ottenerlo. Inoltre è meglio usare le nuove funzioni di mysqli come le vecchie funzioni di mysql saranno deprecate. – Tuim

+4

[SQL Injection ha letto a riguardo ...] (http://en.wikipedia.org/wiki/SQL_injection) – PeeHaa

+0

Sì, quel sito non durerà un'ora in natura. –

risposta

22

Usa UTF-8 quando si creano tavolo.

create table table_name() CHARACTER SET = utf8;

Usa UTF-8 quando si inserisce al tavolo

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

Read More

And More

Codice dettagliata

Sotto codice è testato codice si prega di fare quanto segue è il suo lavoro.

Se è già stato creato il database, si prega di farlo come indicato di seguito. E se non hai creato il database, crealo e imposta Collation su utf8_unicode_ci

E lo stesso vale per la tabella definisce Collation come "utf8_unicode_ci" per i campi di tabella in cui si desidera memorizzare i caratteri di chines.

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>

vedere il risultato e passo visivo come di seguito.

enter image description here

+0

come impostare il nome utente utf8 – user1902899

+0

mysqli_query ("SET character_set_results = utf8", $ db); –

+0

oppure è possibile farlo modificando il campo della tabella da phpmyadmin e impostando il tipo su UTF-8 ... esempio .. ALTER TABLE t MODIFY col1 CHAR (50) SET CARATTERE utf8; –

0

Per il cinese, si ha realmente bisogno utf8mb4, non utf8. Questo a causa di un piccolo numero di caratteri cinesi che richiedono caratteri UTF8 a 4 byte, che non è supportato da utf8 di MySQL.

+0

mysql dice '(1115," Set di caratteri sconosciuto: 'utf8mb4' ")', mysql-v5.1.71 qui. – CodyChan

+1

Quindi è necessario aggiornare almeno a 5.5. (5.5.3 è quando utf8mb4 è diventato disponibile - circa un decennio fa). –

0

Il vero problema riguarda il cookie codificato big5? Il resto dei dati è nel client codificato come utf8? Se 'sì' ad entrambi, ...

Cambiare la connessione sia big5, fare il INSERT/SELECT del cookie, quindi tornare alla utf8 (o, meglio, utf8mb4 dopo l'aggiornamento).

Eseguire SET NAMES big5 o chiamare la funzione charset('big5') per l'API che si sta utilizzando è il modo preferito per passare avanti e indietro.

(Nel frattempo, allontanarsi dall'interfaccia mysql_*;. Passare a mysqli_* o PDO)

Se tutto nel client è big5, allora non c'è alcun bisogno di passare avanti e indietro. Dichiara semplicemente che il client sta usando big5. Nota: non importa se la tabella/colonna è anche big5; MySQL convertirà tra di loro.

0

aggiornamento set di caratteri delle colonne della tabella e utf8 insieme al set di caratteri della tabella. Può essere il check in Mysql workbench alter table e vedere il set di caratteri delle colonne che si desidera supportare i caratteri cinesi.

Problemi correlati