同时使用MS SQL和MySQL数据库连接时,字符集出现问题

时间:2018-11-19 11:35:03

标签: php mysql

我在编写需要同时使用远程MS SQL数据库和本地MySQL数据库的php脚本时遇到了一些麻烦。 MS SQL数据库属于支持票证系统,我仅从该系统中读取数据。本地MySQL数据库用于存储有关支持通知单的其他信息。

我的问题与瑞典语字符å,ä和ö有关。在这两个数据库中,它们都正确存储,当使用HeidiSQL之类的DB GUI浏览表时可以看到它们。

但是当我从每个数据库中获取数据时,宪章的显示方式有所不同。

这是一个例子

<?php

//header('Content-Type: text/html; charset=utf8mb4');
header('Content-Type: text/html; charset=utf8');

$dbaddress ="localhost";
$dbuser="user_name";
$dbpass='user_password';

$dbh = mysqli_connect($dbaddress,$dbuser,$dbpass,'ism') or die(mysqli_error());

mysqli_query($dbh,"SET NAMES utf8");
mysqli_set_charset($dbh,"utf8");

$query="SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8')";
$result = mysqli_query($dbh, $query);

$query = "SELECT * FROM tickets WHERE partner ='Dia Falun & Västerås AB, Dialect' limit 1";
$result = mysqli_query($dbh, $query);

while($partner = mysqli_fetch_array($result)){  
    $partnername=$partner['partner'];
}
print "<p>$partnername</p>";
print "<p>Detected encoding: ".mb_detect_encoding($partnername)."</p>";

$user = 'user_name';
$pass = 'user_password';
$server = 'server_address';
$database = 'db_name';

$CharacterSet = "utf8";
//Upprätta anslutningen
$connection_string = "DRIVER={SQL Server};SERVER=$server;DATABASE=$database;CharacterSet=$CharacterSet"; 

$ism = odbc_connect($connection_string,$user,$pass);

$query="SELECT sitename FROM Incident WHERE incidentnumber=415521";

    $result = odbc_exec($ism, $query) or die(odbc_errormsg());

    while(odbc_fetch_row($result)){        
        $partner=odbc_result($result,'sitename');

    }

print "<p>$partner</p>";
print "<p>Detected encoding: ".mb_detect_encoding($partner)."</p>"

?>

我不明白的是关于标题。在脚本的开头,我指定了字符集,如果将其设置为utf8,则可以正确显示MySQL数据库中的字符,但来自MS SQL的字符仅显示为``。 但是,如果我将字符集设置为utf8mb4,则情况正好相反。来自MS SQL数据库的字符是正确的,而来自MySQL数据库的字符则显示为“Ô,“ ¥”,具体取决于字符。

本地MySQL数据库中的排序规则设置为“ utf8_bin”。我也尝试将其更改为“ utf8mb4_bin”,但没有区别。

我认为这可能与我使用mb_detect_encoding()测试每个字符串的编码时得到的结果有关 对于本地数据库,我得到utf8,但是从MS SQL数据库返回的字符串没有任何结果。

如果有必要,我只能更改本地数据库的排序规则,没有对MS SQL数据库的管理员访问权限。

有人可以帮忙吗?

0 个答案:

没有答案