/*================================================================= Copyright (C) 2012 2013 BizStation Corp All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. =================================================================*/ #include "characterset.h" #include #include #ifdef __BCPLUSPLUS__ #pragma package(smart_init) #endif namespace bzs { namespace db { namespace protocol { namespace tdap { namespace mysql { struct SCHARSET_INFO { unsigned short codePage; char name[12]; char charSize; }; SCHARSET_INFO charsetInfo[MAX_CHAR_INFO] = { { 1252, "acp", 1 }, // 0 { 1252, "latin1", 1 }, // 1 { 950, "big5", 2 }, // 2 { 850, "dec8", 1 }, // 3 { 850, "cp850", 1 }, // 4 { 0, "hp8", 1 }, // 5 { 20866, "koi8r", 1 }, // 6 { 28592, "latin2", 1 }, // 7 { 20107, "swe7", 1 }, // 8 { 1252, "ascii", 1 }, // 9 { 50220, "ujis", 3 }, // 10 { 932, "sjis", 2 }, // 11 { 1255, "hebrew", 1 }, // 12 { 0, "tis620", 1 }, // 13 { 949, "euckr", 2 }, // 14 { 20866, "koi8u", 1 }, // 15 { 936, "gb2312", 2 }, // 16 { 1253, "greek", 1 }, // 17 { 1250, "cp1250", 1 }, // 18 { 0, "gbk", 2 }, // 19 { 0, "latin5", 1 }, // 20 { 0, "armscii8", 1 }, // 21 { 65001, "utf8", 3 }, // 22 { 1200, "ucs2", 2 }, // 23 { 866, "cp866", 1 }, // 24 { 0, "keybcs2", 1 }, // 25 { 0, "macce", 1 }, // 26 { 0, "macroman", 1 }, // 27 { 852, "cp852", 1 }, // 28 { 0, "latin7", 1 }, // 29 { 65001, "utf8mb4", 4 }, // 30 { 1251, "cp1251", 1 }, // 31 { 1201, "utf16", 4 }, // 32 { 1200, "utf16le", 4 }, // 33 //5.6.1 or upper { 1256, "cp1256", 1 }, // 34 { 1257, "cp1257", 1 }, // 35 { 12000, "utf32", 4 }, // 36 { 0, "binary", 1 }, // 37 { 932, "cp932", 2 }, // 38 { 0, "geostd8", 1 }, // 39 { 51932, "eucjpms", 3 } // 40 }; /* 5.5.28 +----------+----------------+---------------------+--------+ | Charset | Description | Default collation | Maxlen | +----------+----------------+---------------------+--------+ | big5 | | big5_chinese_ci | 2 | | dec8 | | dec8_swedish_ci | 1 | | cp850 | | cp850_general_ci | 1 | | hp8 | | hp8_english_ci | 1 | | koi8r | | koi8r_general_ci | 1 | | latin1 | | latin1_swedish_ci | 1 | | latin2 | | latin2_general_ci | 1 | | swe7 | | swe7_swedish_ci | 1 | | ascii | | ascii_general_ci | 1 | | ujis | | ujis_japanese_ci | 3 | | sjis | | sjis_japanese_ci | 2 | | hebrew | | hebrew_general_ci | 1 | | tis620 | | tis620_thai_ci | 1 | | euckr | | euckr_korean_ci | 2 | | koi8u | | koi8u_general_ci | 1 | | gb2312 | | gb2312_chinese_ci | 2 | | greek | | greek_general_ci | 1 | | cp1250 | | cp1250_general_ci | 1 | | gbk | | gbk_chinese_ci | 2 | | latin5 | | latin5_turkish_ci | 1 | | armscii8 | | armscii8_general_ci | 1 | | utf8 | | utf8_general_ci | 3 | | ucs2 | | ucs2_general_ci | 2 | | cp866 | | cp866_general_ci | 1 | | keybcs2 | | keybcs2_general_ci | 1 | | macce | | macce_general_ci | 1 | | macroman | | macroman_general_ci | 1 | | cp852 | | cp852_general_ci | 1 | | latin7 | | latin7_general_ci | 1 | | utf8mb4 | UTF-8 Unicode | utf8mb4_general_ci | 4 | | cp1251 | | cp1251_general_ci | 1 | | utf16 | UTF-16 Unicode | utf16_general_ci | 4 | | cp1256 | | cp1256_general_ci | 1 | | cp1257 | | cp1257_general_ci | 1 | | utf32 | UTF-32 Unicode | utf32_general_ci | 4 | | binary | | binary | 1 | | geostd8 | | geostd8_general_ci | 1 | | cp932 | | cp932_japanese_ci | 2 | | eucjpms | | eucjpms_japanese_ci | 3 | +----------+----------------+---------------------+--------+ */ unsigned int charsize(int index) { if (index < MAX_CHAR_INFO) return charsetInfo[index].charSize; return 1; } const char* charsetName(int index) { if ((index > 0) && index < MAX_CHAR_INFO) return charsetInfo[index].name; assert(0); return ""; } unsigned int charsetIndex(const char* name) { for (int i = 1; i < MAX_CHAR_INFO; ++i) { if (strcmp(charsetInfo[i].name, name) == 0) return i; } return -1; } unsigned int charsetIndex(unsigned short codePage) { if (codePage == 932) return CHARSET_CP932; for (int i = 1; i < MAX_CHAR_INFO; ++i) { if (charsetInfo[i].codePage == codePage) return i; } return -1; } unsigned int codePage(unsigned short charsetIndex) { if ((charsetIndex > 0) && charsetIndex < MAX_CHAR_INFO) return charsetInfo[charsetIndex].codePage; assert(0); return 0; } } // namespace mysql } // namespace tdap } // namespace protocol } // namespace db } // namespace bzs