Technology
PerlからMySQLに日本語を含むレコードを登録する際の文字化け対策
2011-11-27MySQLPerl
set namesを使うといいみたいです。
use strict; use warnings; use utf8; use DBI; my $dbh = DBI->connect($datasource, $username, $password); # set namesを使う $dbh->do('set names utf8'); $dbh->do('insert into SAMPLETABLE (`hoge`) values "ほげ"');
ただ、PHPの業界ではset namesを使用することはダメであることが言われています。WWWブラウザのフォームから受け取った、ユーザの入力に対して、PHPで処理する場合は、SET NAMESなどには脆弱性があるようです。
SET NAMESは禁止
http://blog.ohgaki.net/set_namesa_mcb_asc
SET NAMESが危険な理由のおさらい
http://www.bpsinc.jp/blog/archives/1133
SET NAMESは禁止?
http://cakephp.seesaa.net/article/52562968.html
PHPからSET NAMESを使わない方が良い理由と対策まとめ
http://nonn-et-twk.net/twk/why-set-names-in-php-is-bad
ただ、これらはPHPだけの問題なのか不明な上、そもそもこれらの話題が、現時点で2以上年前の話題であるため、もしかしたら、何か対策が打たれているか、そもそもset namesを使わないように技術書などに書かれているのかもしれません。
SQLインジェクションの対策は必要であることは念頭に入れたうえで、ユーザの入力の余地がない部分に対しては、とりあえず、set namesで解決できそうです。
Topic
- Languages (24)
- ActionScript (8)
- C# (1)
- Java (6)
- Android (2)
- JavaScript (5)
- JavaScript (4)
- node.js (1)
- Perl (4)
- Database (3)
- MySQL (3)
- Miscellaneous (5)