无法将西里尔文本插入到MySQL数据库中。

7
当我试图将西里尔文本插入MySQL数据库时,它会像这样插入: г???????????? ?? ????????
Рісѓрїр°ріс‹рї р° с‹рір°рї
所以我有两个页面:registration.php 和 addUser.php。每个页面里面都有该问题。
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

数据库由11个表组成,每个表的排序规则为:utf8_general_ci,类型为:MyISAM。每个表中的每个字段都有排序规则:utf8_general_ci。

当我直接在phpMyAdmin中向数据库写入数据并将这些数据显示到网页上时,英语和俄语都没问题。

但是,当我在registration.php中填写个人资料,并转到addUser.php时,所有的Cyrillic字符都像我之前写的那样在页面上显示,而且在数据库中也是这样。

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

}
?>

在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

我需要正确地显示、保存和从数据库中选择俄语文本。谢谢! 连接超时时间为10秒。 数据目录为\usr\local\mysql-5.1\data\。


2
http://developer.loftdigital.com/blog/php-utf-8-cheatsheet - BalusC
谢谢,BalusC!你的回答是最好的,非常有帮助!! - yozhik
5个回答

9
尝试在连接数据库后调用mysql_set_charset('utf8');。我认为这类似于执行SET NAMES查询,但由于PHP手册建议使用该函数而不是SET NAMES查询,因此我建议尝试一下。
此外,在显示内容时,您可以尝试使用echo htmlentities($string, ENT_COMPAT, 'UTF-8');

我正在使用mysql_set_charset('utf8');。 - yozhik
@yozhik,将表字段更改为接受UTF-8编码。在想要显示数据库信息的结果页面上,使用mysqli_query($con,"SET NAMES utf8")为mysqli查询设置UTF-8编码。 - Avnish Tiwary

4

我将希腊字母存储在创建如下的表中:

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;

如果表已经创建,我猜您可以在phpmyadmin界面中更改字符集。也许这可以帮助您。


3

检查您的MySQL配置,并确保编码已正确定义。 将以下行添加到my.cnfmy.ini中,取决于您的安装使用哪个文件。 这些设置对我起了作用:

[client]
default-character-set=utf8


[mysql]
default-character-set=utf8


[mysqld]
character-set-server=utf8

1

我在phpMyAdmin中尝试了多个排序规则,以及更改页面的字符集,虽然这看起来没有意义,但在两天的研究后,我愿意尝试任何方法。这个命令帮助了我:mysql_set_charset('utf8');

列上的排序规则设置为koi8r_general_ci。


-1

编辑您的结构字段以设置排序规则为utf16_general_ci
之后插入您的数据。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接