PDO + MsSQL + freetds = неправильные символы в запросах ВСТАВКИ
Я заметил проблему во время запросов SELECT в моем внутреннем проекте, касающуюся символов utf8 (šðčćž). После того, как я исправил проблему с определением freetds для кодировки и версии в файле freetds.conf, я начал получать правильные символы при выполнении запросов SELECT.
Но! Теперь у меня возникают проблемы с запросами на ВСТАВКУ/ОБНОВЛЕНИЕ и с запросом SELECT, когда я пытаюсь найти поля с некоторыми из этих символов (šðčćž), и это только с PDO bindValue метод.
Например, это мой код:
try {
$pdo = new \PDO(
"dblib:host=$host:$port;dbname=$database",
"$username",
"$password"
);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo "There was a problem connecting. " . $e->getMessage();
}
Когда я пытаюсь вставить значения со следующим кодом, вставленные значения в базе данных верны:
$query = "INSERT INTO dbo.TABLE (ID, NAME) VALUES (2, 'Beriša');";
$statement = $pdo->prepare($query);
$statement->execute();
//Result:
//2 Beriša
Но после использования метода bindValue (который я должен использовать, так как я работаю с Symfony2) возникает проблема:
$query = "INSERT INTO dbo.TABLE (ID, NAME) VALUES (?, ?);";
$statement = $pdo->prepare($query);
$statement->bindValue(1, 2, \PDO::PARAM_INT);
$statement->bindValue(2, 'Beriša', \PDO::PARAM_STR);
$statement->execute();
//Result:
//2 Beriša
Ниже вы можете найти мою текущую конфигурацию freetds:
[global]
tds version = 8.0
text size = 20971520
client charset = UTF-8
Коалиция кодировок базы данных - Croatian_CI_AS. К сожалению, я не могу это изменить, так как это старая база данных, предназначенная для работы со старыми приложение, и для этого приложения я работаю над веб-презентацией.
1 answers
Через некоторое время я нашел решение. Он не идеален, так как мне нужно обработать каждое значение (это небольшое исправление для кода, но все еще недостаточно чистое). Если у кого-то есть другая идея, чтобы сделать это лучше, опубликуйте ее, пожалуйста.
$statement->bindValue(2, iconv('utf-8', 'Windows-1252', 'Beriša'), \PDO::PARAM_STR);