【问题标题】:special character in php pdo sqlsrv not handled correctlyphp pdo sqlsrv 中的特殊字符未正确处理
【发布时间】:2017-11-03 07:55:11
【问题描述】:

在我的数据库中,当我在数据库中选择它时,我有一个条目 CARIÑO,当我在浏览器中检查元素时,我得到 CARIÃO 显示。当我尝试再次将其保存在数据库中时,我收到错误消息:

SQLSTATE[HY000]:一般错误:1366 不正确的字符串值:列的'\xC2\x91O' 我想知道如何修复这个错误,让它在浏览器中显示CARIÑO,并再次作为CARIÑO保存到数据库中。

在我的数据库连接中,我有:

$options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'mysql:charset=utf8mb4'); 
//Establishes the connection
$this->_connection = new PDO("sqlsrv:Server=IP;Server=$serverName,1433; Database=".DB_NAME."",DB_USER,DB_PASS,$options);

我使用stackoverflow.com/questions/279170/utf-8-all-the-way-through 中的示例来使用mysql:charset=utf8mb4

在我的选择中,我有:

while ($selected_row = $stmt->fetch(PDO::FETCH_ASSOC)) {
     // $selected_row['column'] = $column;
     //echo $selected_row['patlast'];//this ouputs CARIÃO
     $rows1[] = array_map('utf8_encode', $selected_row);
     $rows[] =  array_map('utf8_encode', $selected_row);
}

我选择的数据库是ms sql server。

UPDATE:

here运行后:

mb_detect_encoding($selected_row['patlast'], mb_detect_order(), true) === 'UTF-8' ?  $content= $selected_row['patlast'] :  $content= mb_convert_encoding($selected_row['patlast'], 'UTF-8');
echo "patlast: ".$content; // i get patlast: CARIÑO
echo "mb_detect_encoding: ". mb_detect_encoding($selected_row['patlast'], mb_detect_order(), true);//i get mb_detect_encoding: UTF-8

【问题讨论】:

  • 你的数据库不是mysql所以不能使用mysql命令
  • @YourCommonSense mysql:charset=utf8mb4 的 ms sql 等价物是什么?
  • 我不知道,我不使用 sqlsrv。但我确信某处应该有 sqlsrv 的现有答案
  • 但奇怪的是,你得到的错误信息看起来像是来自 mysql,而不是 sql server

标签: php sql-server pdo


【解决方案1】:

改变了:

$rows1[] = array_map('utf8_encode', $selected_row);
$rows[] =  array_map('utf8_encode', $selected_row);

$rows1[] = array_map(null, $selected_row);
$rows[] =  array_map(null, $selected_row);

现在得到正确的名称CARIÑO

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-13
    • 2018-09-24
    • 2016-09-05
    • 1970-01-01
    • 1970-01-01
    • 2011-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多