无法将俄语文本插入mysql数据库

Posted

技术标签:

【中文标题】无法将俄语文本插入mysql数据库【英文标题】:can't insert russian text into mysql database 【发布时间】:2011-05-23 05:32:05 【问题描述】:

当我尝试将俄语文本插入 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 - 所有的俄语字符都像我在上面写的那样显示在页面和数据库中。

    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\

【问题讨论】:

developer.loftdigital.com/blog/php-utf-8-cheatsheet 谢谢,BalusC!你的回答是最有帮助的!!! 【参考方案1】:

连接数据库后尝试调用mysql_set_charset('utf8');。我认为这类似于执行 SET NAMES 查询,但是由于 PHP 手册说建议在 SET NAMES 查询上使用该函数,所以我会尝试一下。

另外,当你展示你的内容时,你可以试试echo htmlentities($string, ENT_COMPAT, 'UTF-8');

【讨论】:

我正在使用 mysql_set_charset('utf8'); @yozhik 更改表格字段以接受 UTF-8。在您要显示数据库信息的结果页面上。使用 mysqli_query($con,"SET NAMES utf8"); 为 mysqli 查询设置 UTF-8;【参考方案2】:

我将希腊语存储在这样创建的表中:

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 界面中更改 charset 它。也许这会有所帮助。

【讨论】:

【参考方案3】:

检查您的 MySQL 配置并确保您的编码定义正确。 将这些行添加到您的安装使用的 my.cnfmy.ini。 这些设置对我有用:

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
character-set-server=utf8

【讨论】:

【参考方案4】:

我已经在 phpMyAdmin 中尝试了多个排序规则以及更改页面的字符集,这没有意义,但经过两天的研究,我愿意尝试任何事情。这个命令帮助了我:mysql_set_charset('utf8');

列上的排序规则设置为 koi8r_general_ci

【讨论】:

【参考方案5】:

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

【讨论】:

以上是关于无法将俄语文本插入mysql数据库的主要内容,如果未能解决你的问题,请参考以下文章

在mysql数据库中插入和获取不同的语言

无法使用jsp将数据插入mysql

sqlserver 插入完整的数据后,为啥查询出来某个字段为只显示一半

mysql根据条件将文本数据插入数据库

如何将文本框中的数据插入到 java-netbeans 中的 mysql 数据库中

将用户输入从文本框插入到数据库(使用 mysql 的 PHP 到 PHPMYADMIN)代码由于某种原因不起作用