[英]Perl DBI/Mysql Unicode Bug
我不確定這是一個錯誤還是做錯了什么:
我讀取數據
open my $fh, "<:encoding(iso-latin1)", $file or die "Failed to open $file: $!";
$ file絕對在iso-latin1中。
然后我有一個mysql表是
ENGINE=InnoDB AUTO_INCREMENT=53072 DEFAULT CHARSET=latin1
我檢查連接設置:
$dbh->prepare("show variables");
這使
character_set_client, latin1
character_set_connection, latin1
character_set_database, latin1
character_set_filesystem, binary
character_set_results, latin1
character_set_server, latin1
character_set_system, utf8
所以對我來說,一切都應該沒問題:
但是:表中的數據是純utf8(在這種情況下,很可能是perl的內部格式)。
我是否錯過了某些東西,這可能是DBI / DBD :: mysql中的錯誤?
我的猜測是您是對的,並且此數據采用Perl的內部字符格式。 順序是這樣的。
open
語句上的編碼選項,從輸入文件讀取數據並自動將其轉換為Perl字符 您缺少的步驟是在將Perl字符發送到數據庫之前將其編碼回Latin-1。 顯而易見的解決方案是對您發送到數據庫的每個值調用encode('iso-885901', $string)
。 如果有某種自動編碼選項,那就太好了。 但是我找不到。
當然,如果您的數據全部為Latin-1,那么您可以考慮忽略任何解碼/編碼問題。 一切都應該沒有這種復雜性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.