SQL编码问题:当在DB(UPDATE)中更新数据时,字符变得乱码

时间:2013-09-25 01:16:38

标签: php sql sql-server pdo

我正在使用pdo通过php来更新我的sql。 当我在DB中放置主值时,编码似乎没问题。 但由于某些或其他原因,我使用sql UPDATE命令 改变数据即时通讯。 为了确保我传递数据的方式没有任何问题,我将查询发送的信息改为我控制的静态数据,并且在更新后它仍然给我带来了gibrish。

这是我发送数据的方式:

function ConnectToSQLAndGetDBConnSTRVar() {
    try {
    $dbname = "db";
    $serverName = ".\SQLEXPRESS";  
    $username = "user";
    $pw = "pass"; 
    $dbh = new PDO ("sqlsrv:server=$serverName;Database=$dbname","$username","$pw"  );
    return $dbh;
    } 
    catch (PDOException $e) {
    print "Failed to get DB handle: " . $e->getMessage() . "\n";
    exit;
    }    
} 
  $db = ConnectToSQLAndGetDBConnSTRVar;
  $NewQuery = "UPDATE subtopics SET SubTopic_Name = 'תוכן' WHERE SubTopic_ID=1";
  $db->query($NewQuery);

它可能会让你看到我的内容变得流畅,但我向你保证它不是,它只是用另一种语言......

注意:我不能使用charset = utf-8它给我一个错误: 在dsn字符串

中指定了无效的关键字字符集

2 个答案:

答案 0 :(得分:0)

您可以将其添加到$driver_options数组(new PDO()的最后一个参数):

ARRAY(PDO::MYSQL_ATTR_INIT_COMMAND, "SET CHARACTER SET utf8")

答案 1 :(得分:0)

您将Unicode数据存储在NVARCHAR列中。您需要将字符串表示为Unicode,例如

$NewQuery = "UPDATE subtopics SET SubTopic_Name = N'תוכן' WHERE SubTopic_ID=1";
--------------------------------------------------^ this N is important