проблема с преобразованием как функция в оракуле / доктрине - PullRequest
0 голосов
/ 04 февраля 2019

В oracle есть функция "convert" для преобразования из одной кодировки в другую.Я написал пользовательскую функцию для доктрины (преобразование столбца из ISO-8859-2 в UTF-8:

<?php
namespace AppBundle\DQL;
use Doctrine\ORM\Query\AST\Functions\FunctionNode;
use Doctrine\ORM\Query\Lexer;
class ConvertFunction extends FunctionNode
{
    public $stringPrimary;

    public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker)
    {
        return $sqlWalker->getConnection()->getDatabasePlatform()->getUpperExpression(
            "CONVERT(".$sqlWalker->walkSimpleArithmeticExpression($this->stringPrimary).", 'EE8ISO8859P2', 'UTF8')"
        );
    }

    public function parse(\Doctrine\ORM\Query\Parser $parser)
    {
        $parser->match(Lexer::T_IDENTIFIER);
        $parser->match(Lexer::T_OPEN_PARENTHESIS);
        $this->stringPrimary = $parser->StringPrimary();
        $parser->match(Lexer::T_CLOSE_PARENTHESIS);
    }
}

, когда я его использую, он ничего не ищет, но когда я запускаю sql в БД, он работает.

Изменяет ли symfony / doctrine кодировку переменной?

edit:

(моя пользовательская функция объявляется как convertToISO8859): Когда я запускаю (в symfony):

select * from tables where convertToISO8859(name) = 'Jesień'

Он ничего не возвращает, но в Symfony Profiler правильно показывает sql:

select * from tables where upper(convert(name), 'EE8ISO8859P2', 'UTF8') = 'Jesień'
...