Почему та же строка utf8 отображается неправильно? - PullRequest
0 голосов
/ 04 марта 2020

У меня DBIx::Class исключение:

DBIx::Class::Storage::DBI::_dbh_execute(): DBI Exception: DBD::Pg::st execute failed: ERROR:  duplicate key value violates unique constraint "company_name"
DETAIL:  Key (name)=(ТОВАРИСТВО З ОБМЕЖЕНОЮ ВІДПОВІДАЛЬНІСТЮ ) already exists. [for Statement "UPDATE "contractor" SET "edr_cert" = ?, "name" = ?, "nds_cert" = ?, "site" = ?, "tax_system" = ? WHERE ( "id" = ? )" with ParamValues: 1='1 071 102 0000 032922', 2='ТÐ.Ð.Ð.Ð Ð.СТÐ.Ð. Ð. Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ю Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ð.ЬÐ.Ð.СТЮ ', 3=undef, 4='info@domain', 5='1', 6='193'] at

Здесь вы можете видеть, что то же значение для столбца name отображается как:

ТОВАРИСТВО З ОБМЕЖЕНОЮ ВІДПОВІДАЛЬНІСТЮ
ТÐ.Ð.Ð.Ð Ð.СТÐ.Ð. Ð. Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ю Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ð.ЬÐ.Ð.СТЮ

Почему оно отличается? и как это исправить?

Я использую DBD::Pg и не настраиваю никаких специфических c параметров при подключении к БД, потому что:

DBD :: Pg имеет обширную поддержку для client_encoding в UTF-8, и большинство таких вещей, как кодирование и декодирование, должны выполняться автоматически.

UPD

package HyperMouse::Schema::Result::Contractor;

use utf8;
use Modern::Perl;
use parent 'HyperMouse::Schema::NoTemporalResult';


my $X =  __PACKAGE__;
$X->table( 'contractor' );

$X->resultset_class(
    'HyperMouse::Schema::ResultSet::Contractor'
);


$X->add_columns(
    id => {
        data_type         => 'integer',
        is_auto_increment => 1,
    },
    name => {
        data_type   => 'text',
    },
);

$X->set_primary_key("id");
$X->add_unique_constraint([ 'name' ]);

где-то в коде:

 my $db =  DBI::connect( ... );
 my $rs =  $db->resultset( 'Contractor' );
 $rs->create({
    name => 'ТОВАРИСТВО З ОБМЕЖЕНОЮ ВІДПОВІДАЛЬНІСТЮ',
 });
 my $row =  $rs->create({ name => 'X2' });
 $row->update({
    name => 'ТОВАРИСТВО З ОБМЕЖЕНОЮ ВІДПОВІДАЛЬНІСТЮ',
 });
...