Использование SQL Server с PHP Cake: проблема кодирования - PullRequest
2 голосов
/ 15 июля 2011

Мне нужно использовать MS SQL Server 2008 для хранения данных приложения PHP CAKE.

Я успешно установил драйвер PDO от Microsoft для PHP и источник данных dbo для php cake.

Мое приложение связывается с сервером.

Но у меня есть проблемы с кодировкой, и я не знаю, как управлять.

Я провел некоторое исследование, и оказалось, что SQL-сервер на самом деле не поддерживает utf8 для полей varchar (если я правильно понял).

SQL Server сообщает мне с запросом «SELECT SERVERPROPERTY ('Collation')", что у меня есть кодировка French_CI_AS (которая кажется правильной).

Я сделал несколько настроек поиска php cake, и, похоже, мы можем указать параметр «encoding» для конфигурации базы данных (в app / config / database.php). Я попытался установить его на French_CI_AS и utf8, но это ничего не меняет, у меня все еще есть нераспознанные символы на моей странице.

Я не уверен, что источник данных сервера sql на самом деле использует этот параметр, поэтому я искал в dbo_sqlsrv.php и нашел свойство "charset", поэтому я установил для него значение "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES". ", но теперь у меня другая ошибка, торт больше не находит мой стол:

Предупреждение (2): sqlsrv_query () ожидает, что параметр 1 будет ресурсом, логическое значение [CORE \ cake \ libs \ model \ datasources \ dbo \ dbo_sqlsrv.php, строка 185] Предупреждение (512): ошибка SQL: неверный параметр был передан sqlsrv_query. [CORE \ cake \ libs \ model \ datasources \ dbo_source.php, строка 684] Запрос: ВЫБЕРИТЕ TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
Ошибка таблицы базы данных: Мониторы таблицы базы данных для модели Moniteur не был найден. Обратите внимание: если вы хотите настроить эту ошибку сообщение, создайте приложение \ views \ errors \ missing_table.ctp

Но если я сам выполню эту команду, я отчетливо вижу эту таблицу:

TABLE_NAME

Гарагисты

moniteurs

(затронуто 2 строк)

и, как вы можете видеть, в именах таблиц у меня даже нет символов не-ascii.

Так что я немного растерялся, и я не знаю, где искать сейчас, у вас есть идеи?

Спасибо!

1 Ответ

4 голосов
/ 15 июля 2011

Я наконец нашел решение!

Мне пришлось преобразовать все мои поля в nvarchar вместо varchar и установить для кодировки моего файла конфигурации базы данных php значение "UTF-8" ("-" имеет значение):

var $default = array(
        'driver' => 'sqlsrv',
        'host' => 'localhost',
        'login' => 'myUser',
        'password' => 'myPassword',
        'database' => 'myDatabase',
        'prefix' => '',
        'charset'=>'UTF-8'
    );

Теперь все отображается в правильной кодировке!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...