На машине Linux я использую PDO DBLIB для подключения к базе данных MSSQL и вставки данных в таблицу SQL_Latin1_General_CP1_CI_AS
. Проблема в том, что когда я пытаюсь вставить китайские символы (многобайтовые), они вставляются как å"ˆå¸‚香åŠåŒºç 江路å·
.
Мой (часть) кода выглядит следующим образом:
$DBH = new PDO("dblib:host=$myServer;dbname=$myDB;", $myUser, $myPass);
$query = "
INSERT INTO UserSignUpInfo
(FirstName)
VALUES
(:firstname)";
$STH = $DBH->prepare($query);
$STH->bindParam(':firstname', $firstname);
Что я пробовал до сих пор:
-
Выполнение
mb_convert_encoding
доUTF-16LE
на$firstname
и CAST как VARBINARY в запросе типа:$firstname = mb_convert_encoding($firstname, 'UTF-16LE', 'UTF-8');
VALUES (CAST(:firstname AS VARBINARY));
Это приводит к правильной вставке символов, пока не появятся некоторые не-многобайтовые символы, которые прерывают выполнение PDO.
-
Настройка моего подключения как utf8:
$DBH = new PDO("dblib:host=$myServer;dbname=$myDB;charset=UTF-8;", $myUser, $myPass); $DBH->exec('SET CHARACTER SET utf8'); $DBH->query("SET NAMES utf8");
-
Установка
client charset
в UTF-8 в моем freetds.confЭто не повлияло.
Есть ли вообще способ вставить многобайтовые данные в эту базу данных SQL? Есть ли другой способ обхода? Я думал о том, чтобы попробовать PDO ODBC или даже mssql, но подумал, что лучше спросить здесь, прежде чем тратить больше времени.
Спасибо заранее.
EDIT:
В итоге я использовал MSSQL и префикс типа N
. Я поменяю местами и попробую PDO_ODBC, когда у меня будет больше времени. Спасибо всем за ответы!