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)