На машине Linux я использую PDO DBLIB для подключения к базе данных MSSQL и вставки данных в таблицу SQL_Latin1_General_CP1_CI_AS
. Проблема в том, что когда я пытаюсь вставить китайские символы (многобайтовые), они вставлены как 哈市香åŠåŒºç 江路å·
.PDO DBLIB многобайтовая (китайская) кодировка символов - SQL-сервер
My (часть) код выглядит следующим образом:
$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, когда у меня будет больше времени. Спасибо всем за ответы!
Извините за вопрос, но несколько раз сверки поля отличается от сортировки таблицы, так что я хочу знать, ** типа ** и * * сортировка ** вашего поля; плз. –
Вы тестируете 'nvarchar()' или 'ntext'? –
Согласно [this] (http://php.net/manual/en/ref.pdo-dblib.php#109439) вы можете сначала преобразовать данные, а затем вставить. Ссылка делает что-то вроде этого: '$ STH-> bindValue (': value', iconv ('UTF-8', 'ISO8859-1', $ value));'. Это похоже на первый пункт вашего вопроса в разделе «Что я пробовал до сих пор».Я не понимаю, какой тип столбца вы вставляете, поэтому это может не сработать. –