[前][次][番号順一覧][スレッド一覧]

mysql:9469

From: とみたまさひろ <とみたまさひろ <tommy@xxxxxxxxxx>>
Date: Fri, 28 May 2004 23:11:46 +0900
Subject: [mysql 09469] Re: 日本語対応上の問題点

とみたです。

# しまった、面白そうな話題に乗り遅れてしまった…(^^;

On Thu, 27 May 2004 12:36:04 +0900
SUGAWARA Hajime <sugawara@xxxxxxxxxx> wrote:

> Hirofumi Fujiwara <fuji@xxxxxxxxxx>さん:
> >   日本語文字列を扱うときに、バイト数、文字数、カラム数(半角で何文字)
> >   の3つを考えながら行わないといけないのですが、MySQLに限らず、SQLは
> >   バイト数または文字数しか考慮していないことが多く、表示に直接関係する
> >   場合、多バイト文字である日本語などを扱うときには、カラム数が問題にな
> >   ります。

>  「カラム数」というのは表示上の問題だと思われるので、そういったものはホ
> スト側(SQL側)ではなくクライアント側(アプリケーション側)で解決すべき
> 問題なのではないかと思います。

私もそう思います。

昔ながらの C API でカラム数を取得するなら、マルチバイト文字列をワイド
文字列に変換して、wcwidth() を使えば取得できますね。

↓こんな感じ。

#include <stdlib.h>
#include <locale.h>
#include <wchar.h>
int main(int argc, char *argv[])
{
    char *mbstr = "ABCあいうえお";
    wchar_t wcstr[1024];
    size_t n;

    setlocale(LC_ALL, "");
    n = mbstowcs(wcstr, mbstr, 1024);
    printf("%d\n", wcswidth(wcstr, n));	/* => 13: 文字列全体のカラム数 */
    printf("%d\n", wcwidth(wcstr[0]));	/* =>  1: "A"のカラム数 */
    printf("%d\n", wcwidth(wcstr[3]));	/* =>  2: "あ"のカラム数 */
}

この例では書いてませんが、日本語EUCでは、半角カタカナは2バイトですが
ちゃんとカラム数は 1 と出力されます。

# 懐かしい…。

-- 
とみたまさひろ <tommy@xxxxxxxxxx>
日本MySQLユーザ会 http://www.mysql.gr.jp

[前][次][番号順一覧][スレッド一覧]

      9444 2004-05-27 12:11 [Hirofumi Fujiwara <f] 日本語対応上の問題点                    
      9445 2004-05-27 12:28 ┣[seiji takegata <take]                                       
      9450 2004-05-27 15:23 ┃┗[IWAMURO Motonori <iw]                                     
      9458 2004-05-28 11:28 ┃ ┗[Hirofumi Fujiwara <f]                                   
      9459 2004-05-28 13:53 ┃  ┣[seiji takegata <take]                                 
      9462 2004-05-28 15:38 ┃  ┃┗[IWAMURO Motonori <iw]                               
      9463 2004-05-28 15:57 ┃  ┣[IWAMURO Motonori <iw]                                 
      9464 2004-05-28 16:14 ┃  ┃┗["Kim, Dong Kyu" <kim]                               
      9466 2004-05-28 18:58 ┃  ┃ ┗[深海水草 <VYG01106@x]                             
      9465 2004-05-28 18:58 ┃  ┗[深海水草 <VYG01106@x]                                 
      9467 2004-05-28 19:32 ┃   ┗[Hirofumi Fujiwara <f]                               
      9446 2004-05-27 12:36 ┣[SUGAWARA Hajime <sug]                                       
      9447 2004-05-27 12:41 ┃┣["T.P.S.Nakagawa" <ya]                                     
      9448 2004-05-27 13:04 ┃┃┗[SUGAWARA Hajime <sug]                                   
      9449 2004-05-27 13:10 ┃┃ ┗["T.P.S.Nakagawa" <ya]                                 
      9455 2004-05-27 17:55 ┃┣[Hirofumi Fujiwara <f]                                     
      9456 2004-05-27 22:48 ┃┃┗[SUGAWARA Hajime <sug]                                   
->    9469 2004-05-28 23:11 ┃┗[とみたまさひろ <tomm]                                     
      9480 2004-05-31 11:19 ┃ ┗[IWAMURO Motonori <iw]                                   
      9483 2004-05-31 15:46 ┃  ┣[とみたまさひろ <tomm]                                 
      9501 2004-06-01 11:52 ┃  ┃┗[IWAMURO Motonori <iw]                               
      9502 2004-06-01 12:12 ┃  ┃ ┣[SUGAWARA Hajime <sug]                             
      9509 2004-06-01 16:36 ┃  ┃ ┃┗[IWAMURO Motonori <iw]                           
      9528 2004-06-03 18:30 ┃  ┃ ┃ ┗[とみたまさひろ <tomm]                         
      9507 2004-06-01 13:49 ┃  ┃ ┗[とみたまさひろ <tomm]                             
      9488 2004-05-31 21:41 ┃  ┗[Hirofumi Fujiwara <f]                                 
      9489 2004-05-31 22:10 ┃   ┗[mohri <mohri@xxxxxxx]                               
      9491 2004-05-31 22:33 ┃    ┗[ML account <ml@xxxxx]                             
      9492 2004-05-31 22:48 ┃     ┣[mohri <mohri@xxxxxxx]                           
      9493 2004-05-31 23:12 ┃     ┃┗[ML account <ml@xxxxx]                         
      9494 2004-05-31 23:26 ┃     ┃ ┗[mohri <mohri@xxxxxxx]                       
      9512 2004-06-01 17:45 ┃     ┗[Hirofumi Fujiwara <f]                           
      9451 2004-05-27 15:44 ┗[UNO Shintaro <uno@xx]