2010-12-10 21 views
5

Cuando estoy tratando de insertar el texto ruso en la base de datos MySQL lo inserta como: г ???????????? ?? ????????
Рісѓрїр ° ріс <рї р ° с <рір ° рїno se puede insertar el texto ruso en la base de datos mysql

lo tanto, tengo dos páginas: registration.php y addUser.php. En cada uno de ellos

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

base de datos consta de 11 tablas, cada tabla tiene cotejo: utf8_general_ci, Tipo: MyISAM. Cada campo en cada tabla tiene colación: utf8_general_ci.

Cuando estoy escribiendo en la base de datos directamente en phpMyAdmin y luego mostrar estos datos a la página web. En inglés y ruso, todo está bien.

Pero cuando estoy lleno mi formulario con datos personales en registration.php y luego yendo a addUser.php - todos los caracteres rusos aparecen como escribí en la parte superior de la página y también en la base de datos.

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

} 
?> 
Hay

también dicha información en 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 

por eso es necesario para mostrar correctamente, guardar y seleccionar texto ruso de la base de datos. Gracias! tiempo de espera de conexión 10 datadir \ usr \ \ Local mysql-5.1 \ data \

+2

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

+0

Gracias, BalusC !! Tu respuesta fue lo mejor que ayuda !!! – yozhik

Respuesta

5

intentar llamar a mysql_set_charset('utf8'); después de conectarse a la base de datos. Creo que es similar a ejecutar una consulta SET NAMES, pero dado que el manual de PHP dice que se recomienda usar esa función sobre una consulta SET NAMES, lo intentaré.

Además, al mostrar su contenido, podría intentar echo htmlentities($string, ENT_COMPAT, 'UTF-8');

+0

Estoy usando mysql_set_charset ('utf8'); – yozhik

+0

no ayuda ..... – yozhik

+0

@yozhik cambie el campo de la tabla para aceptar UTF-8. Y en la página de resultados donde quiere mostrar la información de DB. configure el UTF-8 para la consulta mysqli usando mysqli_query ($ con, "SET NAMES utf8"); –

3

Compruebe la configuración de MySQL y asegurarse de que su codificación se define correctamente. Agregue estas líneas a my.cnf o my.ini, cualquiera que sea su instalación. Estos ajustes hicieron el truco para mí:

[client] 
default-character-set=utf8 


[mysql] 
default-character-set=utf8 


[mysqld] 
character-set-server=utf8 
1

He intentado varias intercalaciones en phpMyAdmin, así como cambiar el juego de caracteres de la página, la cual No tenía sentido, pero estaba dispuesto a intentar cualquier cosa después de dos días de investigación. este comando me ayudó: mysql_set_charset ('utf8');

intercalación de la columna se establece en koi8r_general_ci

3

almaceno griega en las tablas creadas como 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; 

O si tabla ya creada supongo que se puede cambiar la charset en el phpmyadmin interfaz. Tal vez esto ayude.

-1

Edite su campo structure para establecer la intercalación utf16_general_ci.
Después de eso inserte sus datos.

Cuestiones relacionadas