mysql:691
From: 民斗 <民斗 <tommy@xxxxxxxxxx>>
Date: Mon, 15 Feb 1999 23:40:05 +0900
Subject: [mysql 00691] Re: sjis 版半角カナフィールド
民斗です。 [Subject: [mysql 00689] sjis 版半角カナフィールド] [Date: Sat, 13 Feb 1999 20:08:23 +0900 From:"Satoshi Tatsuoka"] > sjis版でテーブル名、フィールド名に半角カナが使えるように修正してみました。 > これで問題ないと思うのですがどうでしょう。--> 民斗さん。 > 「シリアル」というフィールドを半角カナにしようと失敗して、 > 急いで作ったパッチです。 このパッチは、半角カタカナを「英小文字」と見なすというものになって いるようです。実際に問題があるかどうかはわからないですが…。 データベース名/テーブル名/項目名などの識別子に使える文字は、元々は、 英数字とアンダースコアだけ(どの charset でも)だったんですが、私が パッチで、それに複数バイト文字を付け加えました。 が、SJIS の半角カタカナは1バイト文字なので、複数バイト文字とは見なさ れず、識別子に使えない文字となってしまってました。 ん〜、どうしましょうかね…。真っ当にやるんなら ctype-sjis.c の変更 ではできないです。「英数字と'_'と複数バイト文字」という条件に「半角 カタカナ」という条件をつければできますけど、SJIS 固有の処理を追加する のにはあまり乗り気ではありません。 やるのなら、「半角カタカナも複数バイト文字の一種とみなす」というのが 一番いいかもしれません。 ということで、この方針でパッチを作ってみました。ただし、全然試してない ので注意してください。コンパイルが通るかすらも試してません。 # 他の部分で、「1バイトの複数バイト文字」が存在してちゃんと動くかどうか、 # 少々不安… (^^;; -- 民斗 <tommy@xxxxxxxxxx> --- include/m_ctype.h.in.orig Mon Feb 15 23:26:01 1999 +++ include/m_ctype.h.in Mon Feb 15 23:28:50 1999 @@ -119,9 +119,10 @@ #define USE_MB_IDENT #define issjishead(c) ((0x81<=(uchar)(c) && (uchar)(c)<=0x9f) || (0xe0<=(uchar)(c) && (uchar)(c)<=0xfc)) #define issjistail(c) ((0x40<=(uchar)(c) && (uchar)(c)<=0x7e) || (0x80<=(uchar)(c) && (uchar)(c)<=0xfc)) -#define ismbchar(p, end) (issjishead(*(p)) && (end)-(p)>1 && issjistail(*((p)+1))? 2: 0) -#define ismbhead(c) issjishead(c) -#define mbcharlen(c) (issjishead(c)? 2: 0) +#define iskata(c) ((0xa1<=(uchar)(c) && (uchar)(c)<=0xdf)) +#define ismbchar(p, end) (iskata(c)? 1: issjishead(*(p)) && (end)-(p)>1 && issjistail(*((p)+1))? 2: 0) +#define ismbhead(c) (iskata(c)||issjishead(c)) +#define mbcharlen(c) (iskata(c)? 1: issjishead(c)? 2: 0) #define MBMAXLEN 2 #endif
689 1999-02-13 20:08 ["Satoshi Tatsuoka" <] sjis 版半角カナフィールド -> 691 1999-02-15 23:40 ┣[民斗 <tommy@xxxxxxxx] 693 1999-02-16 18:09 ┗[民斗 <tommy@xxxxxxxx] 699 1999-02-17 18:18 ┗[民斗 <tommy@xxxxxxxx]