Can you provide DBD::Pg versions for your EL7 and EL8 distros? And check this 
flag:  https://metacpan.org/pod/DBD::Pg#pg_enable_utf8-(integer)
 
 
 
  
>Четверг, 19 декабря 2024, 0:34 +03:00 от Shaomei Liu 
><[email protected]>:
> 
>send again after subscribing.  
>On Wed, Dec 18, 2024 at 11:20AM Shaomei Liu < [email protected] > wrote:
>>Hello,
>>I have a project which uses DBI to write to postgres DB.
>>after upgrading from RHEL7 to RHEL8, the utf-8 character is not displayed 
>>properly in the DB. DB has correct utf-8 encoding set.
>>for example, left double quotation mark   “  is displayed as  â\u0080\u009C .
>>with support from DBI community, the issue was solved by calling decode from 
>>Encode module before writing to DB.
>>wondering what is the change from DBD::pg cause this issue.
>> 
>>perl version is 5.26.3 and 5.16.3 on EL8 and EL7 respectively.
>>DBI version is 1.641 and 1.627 on EL8 and EL7 respectively.
>> 
>>here is the program and execution results.
>>Any feedback are greatly appreciated!
>>thank you
>>Shirley
>> 
>>xxx . com > cat  testutf_decode . pl
>># !/ usr / bin / perl
>>use strict;
>>use  warnings ;
>>use  DBI ;
>>use  Encode 'decode' ;
>>print "DBI version: $DBI::VERSION \n " ;  
>>my $db = "debugutf" ;
>>my $host = "db" ;
>>my $user = "postgres" ;
>>my $pass = "" ;
>>my $dbh = DBI -> connect ( "DBI:Pg:dbname=$db;host=$host" , $user , $pass );
>>my $sql = 'INSERT INTO table1 (title) VALUES (?)' ;
>>my $query = $ dbh -> prepare ( $sql );
>>my $bytes = '“' ;
>>my $chars = decode ( 'UTF-8' ,  $bytes );
>>print "$bytes contains " . length ($bytes). " characters \n " ;
>>print "after decode $bytes contains " . length ($chars). " characters \n " ;
>>#my @values  = ($bytes); # =======> without decode, Database shows “ on EL7 
>>but â\u0080\u009C on EL8
>>my @values  = ($chars);  # ======> with decode, Database shows “ on both EL8  
>>and EL7, decode fixed the issue
>>$ query -> execute (@values);  
>>############### running on EL8
>>xxx . com > . / testutf_decode . pl
>>DBI version:  1.641
>>“ contains  3 characters
>>after decode “ contains  1 characters  
>>[ yyy . com ]$ psql -Upostgres -hdb debugutf
>>psql (16.6)
>>debugutf=# select * from table1;
>>      title
>>---------------
>> â\u0080\u009C   ==========> NOK without decode
>> “               =============> OK with decode, so decode fixed the issue
>>( 2 rows)  
>>############### running on EL7
>>xxx . com > . / testutf_decode . pl
>>DBI version:  1.627
>>“ contains  3 characters
>>after decode “ contains  1 characters  
>>[ yyy . com ]$ psql -Upostgres -hdb debugutf
>>psql (16.6)
>>debugutf=# select * from table1;
>>      title
>>---------------
>> “            =============> OK without decode
>> “            =============> OK with decode
>>( 2 rows)
 

Reply via email to