2010-12-10 6 views
5

Quand j'essaye d'insérer le texte russe dans la base de données MySQL il l'insère comme: г ???????????? ?? ????????
Рісѓрїр ° ріс <рї р ° с <рір ° рїne peut pas insérer le texte russe dans la base de données mysql

Donc, j'ai deux pages: registration.php et addUser.php. Dans chacun d'eux

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 

base de données se composent de 11 tables, chaque table a la collation: utf8_general_ci, tapez: MyISAM. Chaque champ de chaque table a Collation: utf8_general_ci.

Lorsque j'écris directement dans la base de données dans phpMyAdmin et que je montre ces données à la page Web. En anglais et en russe - tout est OK.

Mais quand je suis plein mon formulaire avec des données personnelles sur registration.php et puis aller à addUser.php - tous les caractères russes affichés comme j'ai écrit haut - sur la page et dans la base de données aussi.

function AddNewUser($Name, $Surname, $FatherName, $Email, $Password, $Phone, $DegreeID, $RankID, 
$Organization, $Department, $Country, $City, $Address, $Job) 
{ 
     //fetch data from database for dropdown lists 
     //connect to db or die) 
    $db = mysql_connect($GLOBALS["gl_kussdbName"], $GLOBALS["gl_kussUserName"], $GLOBALS["gl_kussPassword"]) or die ("Unable to connect"); 

    //to prevenr ????? symbols in unicode - utf-8 coding 
    mysql_query("SET NAMES 'UTF8'"); 

    //select database 
    mysql_select_db($GLOBALS["gl_kussDatabase"], $db); 
    $sql = "INSERT INTO UserDetails (
UserFirstName, 
UserLastName, 
UserFatherName, 
UserEmail, 
UserPassword, 
UserPhone, 
UserAcadDegreeID, 
UserAcadRankID, 
UserOrganization, 
UserDepartment, 
UserCountry, 
UserCity, 
UserAddress, 
UserPosition) 
VALUES(
'".$Name."', 
'".$Surname."', 
'".$FatherName."', 
'".$Email."', 
'".$Password."', 
'".$Phone."', 
'".$DegreeID."', 
'".$RankID."', 
'".$Organization."', 
'".$Department."', 
'".$Country."', 
'".$City."', 
'".$Address."', 
'".$Job."' 
);"; 
    //execute SQL-query 
    $result = mysql_query($sql, $db); 
    if (!$result) 
    { 
     die('Invalid query: ' . mysql_error()); 
    } 
    //close database = very inportant 
    mysql_close($db); 

} 
?> 

Là aussi ces informations dans phpMyAdmin:

auto increment increment 1 
auto increment offset 1 
autocommit ON 
automatic sp privileges ON 
back log 50 
basedir \usr\local\mysql-5.1\ 
big tables OFF 
binlog cache size 32,768 
binlog format STATEMENT 
bulk insert buffer size 8,388,608 
character set client utf8 
(Global value) cp1251 
character set connection utf8 
(Global value) cp1251 
character set database cp1251 
character set filesystem binary 
character set results utf8 
(Global value) cp1251 
character set server cp1251 
character set system utf8 
character sets dir \usr\local\mysql-5.1\share\charsets\ 
collation connection utf8_general_ci 
(Global value) cp1251_general_ci 
collation database cp1251_general_ci 
collation server cp1251_general_ci 
completion type 0 
concurrent insert 1 

donc je dois montrer correctement, enregistrer et sélectionner le texte russe de la base de données. Merci! connexion timeout 10 datadir \ usr \ local \ mysql-5.1 \ data \

+2

http://developer.loftdigital.com/blog/php-utf-8-cheatsheet – BalusC

+0

Thanx, BalusC !! Votre réponse était le meilleur que ça aide !!! – yozhik

Répondre

5

Essayez d'appeler mysql_set_charset('utf8'); après vous être connecté à la base de données. Je pense que c'est similaire à l'exécution d'une requête SET NAMES, mais comme le manuel PHP dit que l'utilisation de cette fonction sur une requête SET NAMES est recommandée, je l'essayerais.

En outre, lorsque vous affichez votre contenu, vous pouvez essayer echo htmlentities($string, ENT_COMPAT, 'UTF-8');

+0

J'utilise mysql_set_charset ('utf8'); – yozhik

+0

n'aident pas ..... – yozhik

+0

@yozhik changer le champ de la table pour accepter UTF-8. Et sur la page de résultats où vous souhaitez afficher les informations sur la base de données. définissez l'UTF-8 pour la requête mysqli en utilisant mysqli_query ($ con, "SET NAMES utf8"); –

3

Vérifiez votre configuration MySQL et assurez-vous que votre encodage est correctement défini. Ajoutez ces lignes à my.cnf ou my.ini, quelle que soit votre installation. Ces paramètres ont fait l'affaire pour moi:

[client] 
default-character-set=utf8 


[mysql] 
default-character-set=utf8 


[mysqld] 
character-set-server=utf8 
1

J'ai essayé plusieurs classements dans phpMyAdmin, ainsi que de changer le charset de la page, qui N'a pas de sens mais j'étais prêt à essayer n'importe quoi après deux jours de recherche. cette commande m'a aidé: mysql_set_charset ('utf8');

Collation sur la colonne a été réglée sur koi8r_general_ci

3

I stocker grec dans les tableaux créés comme ths:

CREATE TABLE `test` (
    `test_id` SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT, 
    `test_name` VARCHAR(30) NOT NULL, 
    PRIMARY KEY (`test_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT; 

Ou si la table déjà créée, je suppose que vous pouvez changer le charset dans le phpmyadmin interface. Peut-être que cela aide.

-1

Modifiez le champ structure pour définir le classement utf16_general_ci.
Ensuite, insérez vos données.

Questions connexes