使用perl連接mysql,這個網上有很多案例了,一般大家都是DBI下的DBD::MySQL這個模塊進行.這里做一個mask弄一個TIPS:
Perl DBI MySQL的字符集為UTF8
Perl DBI 特殊字符寫入時報錯
Perl DBI 連接自動重連或是連接超時
1. 當MySQL的字符集是UTF8時需要引入:
1
2
3
4
|
use utf8; binmode (STDOUT, ':encoding(utf8)' ); binmode (STDIN, ':encoding(utf8)' ); binmode (STDERR, ':encoding(utf8)' ); |
目的:
解決perl連接mysql到數據后讀取顯示結果為亂碼的問題.
2.對于特殊字符的寫入,最好使用:
1
2
|
my $sth=$dbh->prepare( "insert into wubx.WeekEvent values(?,?,?,?,?,?,?)" ); $sth->execute($OId,$CId,qq/$Time/,$EventType,qq/$CDesc/,$PId,$RFlag); |
對于字符串有可能是用戶提交的用qq//包裹,減少特殊字符造成SQL不能執行的情況.
3. 如果連接兩個數據庫有交換的操作或是遷數據,要考慮連連超時的情況.
報錯: MySQL server has gone away
處理辦法:
在DBD::mysql 4.012以后支持DBI連接的自動重連.需要設置:
1
|
$dbh->{mysql_auto_reconnect} = 1; |
在早期的模塊中不支持,簡單的方法:
1
2
|
$dbh-> do ( 'set SESSION wait_timeout=72000' ); $dbh-> do ( 'set SESSION interactive_timeout=72000' ); |
此方法適用別的語言連MySQL連接短期丟失或是Server的timeout時間設置太短.