반응형
Perl/MariaDB: 디코딩과 충돌(실행 실패:잘못된 문자열 값: '\xE4...'
저는 펄로 html 파일에서 데이터를 추출하고 데이터베이스에 데이터를 삽입하려고 합니다.하지만 움라우트(ä,ö, ...)에는 이상한 행동이 있습니다.
설정은 다음과 같습니다.
use DBI;
use DBD::mysql;
use HTML::Entities;
$name = ... # extraction from html-file
my $dbh = DBI->connect ("DBI:mysql:db_0",
"root", "mypw",
{ RaiseError => 1
, PrintError => 0
, mysql_enable_utf8mb4 => 1
}
) or die "Fehler beim Verbindungsaufbau zum MariaDB-Server:" .
" $DBI::err -< $DBI::errstr \n";
my $insert_import = $dbh->prepare("INSERT INTO arzt_0 (name) VALUES (?));
$insert_import->execute($name)
or die "Fehler bei der Ausfuehrung: ".
"$DBI::err -> $DBI::errstr (stage_imports $DBI::state)\n"
;
$insert_import->finish();
데이터베이스에 문자 집합 utf8mb4 및 collection utf8mb4_unicode_ci가 있습니다.
스칼라 $name의 내용이 umlaute에 대한 html 코드를 가지고 있기 때문입니다.Ä
위해서Ä
사용한
use HTML::Entities;
HTML 코드를 문자로 변경하다Ä
:
$name = decode_entities $name;
예를 들어, 원본 내용:$name
이었다Ärztin
그리고 디코딩 후Ärztin
.
한다면$name
터미널로 내보냅니다(print $name
) 또는 두 경우 모두 파일로.Ärztin
내보낼 것입니다.
하지만 만약에$name
가 데이터베이스에 삽입되었습니다. 다음 오류가 발생했습니다.
DBD::mysql::st execute failed: Incorrect string value: '\xE4rztin...' for column .......
내가 대본에 쓴다면,
$name = 'Ärztin';
$insert_import->execute($name)
또는 직진
$insert_import->execute('Ärztin')
스크립트를 실행합니다. 오류가 없습니다.Ärztin
열에 기록되어 있습니다.name
.
물론. 뻔하지.$name
디코딩된 경우는 umlaut가 있는 문자열이 스칼라에 직접 기록되는 경우와 다릅니다.이에 대한 설명은 무엇이며 어떻게 문제를 해결할 수 있습니까?
언급URL : https://stackoverflow.com/questions/72662754/perl-mariadb-conflict-with-decoding-execute-failed-incorrect-string-value
반응형
'prosource' 카테고리의 다른 글
투명한 배경으로 UITableViewCell을 만드는 방법 (0) | 2023.08.21 |
---|---|
Excel 2007에서 행을 삽입할 때도 절대 참조 유지 (0) | 2023.08.21 |
LINQ패드 및 오라클 (0) | 2023.08.16 |
명령 출력을 텍스트인 것처럼 필터링 (0) | 2023.08.16 |
프로젝트에서 소스 파일을 독립적으로 컴파일하도록 CLion을 구성할 수 있습니까? (0) | 2023.08.16 |