【发布时间】: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