MySQL 5.0 Reference Manual > 10.1.10. Unicode Support
http://dev.mysql.com/doc/refman/5.0/en/charset-unicode.html
MySQL 5.5 Reference Manual > 10.1.10. Unicode Support
http://dev.mysql.com/doc/refman/5.5/en/charset-unicode.html
簡単なコード(PHP)で動作検証してみました.
$conn=mysql_connect('192.168.0.5:3306','admin','password');
if($conn){
    if(mysql_select_db('test2',$conn)){
        $res=mysql_query('SET NAMES utf8',$conn);        
        if(!$res){
            print(mysql_error()."\n");
        }
        $res = mysql_query("DELETE FROM test");
        if(!$res){
            print(mysql_error()."\n");
        }
        $str="𪀚";
        printf("%s %d bytes\n",$str,strlen($str));
        var_dump(bin2hex($str));
        $res = mysql_query("INSERT INTO test (title) values ('".$str."') ",$conn);
        if(!$res){
            print(mysql_error()."\n");
        }
        $str2="田";
        printf("%s %d bytes\n",$str2,strlen($str2));
        var_dump(bin2hex($str2));
        $res = mysql_query("INSERT INTO test (title) values ('".$str2."') ",$conn);
        if(!$res){
            print(mysql_error()."\n");
        }
        $res=mysql_query('SELECT * FROM test',$conn);
        if($res){
            while($row = mysql_fetch_assoc($res)){
                printf("%s\n",$row['title']);
            }
            mysql_free_result($res);
        }else{
            print(mysql_error()."\n");
        }
    }
    mysql_close($conn);
}
コードでは2つの漢字「𪀚」(鳥+戎)と「田」をデータベースに登録し,検索表示しています.
MySQL 5.0.87の場合,
4バイトの文字があってもエラーは表示されません.
無視されるだけです.
$ php test.php
𪀚 4 bytes
string(8) "f0aa809a"
田 3 bytes
string(6) "e794b0"
田
また,当然「utf8mb4」はサポートしていませんので,使用しようとするとエラーとなります.
$ php mysql.php
Unknown character set: 'utf8mb4'
𪀚 4 bytes
string(8) "f0aa809a"
田 3 bytes
string(6) "e794b0"
田
MySQL 5.6.10の場合は4バイトの文字「𪀚」をutf8で登録しようとするとエラーとなります.
$ php test.php
𪀚 4 bytes
string(8) "f0aa809a"
Incorrect string value: '\xF0\xAA\x80\x9A' for column 'title' at row 1
田 3 bytes
string(6) "e794b0"
「utf8mb4」を使うと4バイトの文字をちゃんと登録することができます.
$ php test.php
𪀚 4 bytes
string(8) "f0aa809a"
田 3 bytes
string(6) "e794b0"
𪀚
田
この投稿では文字化けしてるけど.
取りあえず,そういう問題があることだけは把握しておこう.
 
0 件のコメント:
コメントを投稿