MySQLの考えるマルチバイト文字
MySQLのソース*1を見ていて見つけた「MySQLの考える*2マルチバイト文字」です。
バージョンはMySQL-4.1.18を参考にしています。
EUC-JP
1バイト目 | 2バイト目 | 3バイト目 |
---|---|---|
0xA1〜0xFE | 0xA1〜0xFE | - |
0x8E | 0xA1〜0xDF | - |
0x8F | 0xA1〜0xFE | 0xA1〜0xFE |
表を横に見て、いずれかの行に一致するバイトの列がEUC-JPのマルチバイト文字と判断されます。
ちゃんと3バイトにも対応しているようです。
GBK(簡体字中国語)
1バイト目 | 2バイト目 |
---|---|
0x81〜0xFE | 0x40〜0x7E, 0x80〜0xFE |
GBKは中国の簡体字で使われる文字エンコーディングで、最近はあまり使われていないそうです。しかし、MySQLのエスケープ関数の中にはGBK使用時の問題の為に書かれた処理があるくらいの最凶っぷりを誇る文字エンコーディングですので載せておきます。
Shift_JISと似ていますので、GBKで起きる問題はShift_JISでも起きるかもしれません。
UTF-8は処理が複雑なので省略しますが、1バイト目だけを見て長さを決めているのではなく、全部のバイトを見て判定していました。
0x40〜0x7Eの文字
ついでに、Shift_JISの2バイト目と重複するいわゆるASCII文字の一覧です。色々な事情でちゃんと表示されていない文字があるかもしれません。
バイト | 文字 |
---|---|
0x40 | @ |
0x41〜0x5A | A〜Z |
0x5B | [ |
0x5C | \ |
0x5D | ] |
0x5E | ^ |
0x5F | _ |
0x60 | ` |
0x61〜0x7A | a〜z |
0x7B | { |
0x7C | | |
0x7D | } |
0x7E | ~ |