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

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]