1// Go MySQL Driver - A MySQL-Driver for Go's database/sql package 2// 3// Copyright 2014 The Go-MySQL-Driver Authors. All rights reserved. 4// 5// This Source Code Form is subject to the terms of the Mozilla Public 6// License, v. 2.0. If a copy of the MPL was not distributed with this file, 7// You can obtain one at http://mozilla.org/MPL/2.0/. 8 9package mysql 10 11const defaultCollation = "utf8mb4_general_ci" 12const binaryCollation = "binary" 13 14// A list of available collations mapped to the internal ID. 15// To update this map use the following MySQL query: 16// SELECT COLLATION_NAME, ID FROM information_schema.COLLATIONS WHERE ID<256 ORDER BY ID 17// 18// Handshake packet have only 1 byte for collation_id. So we can't use collations with ID > 255. 19// 20// ucs2, utf16, and utf32 can't be used for connection charset. 21// https://dev.mysql.com/doc/refman/5.7/en/charset-connection.html#charset-connection-impermissible-client-charset 22// They are commented out to reduce this map. 23var collations = map[string]byte{ 24 "big5_chinese_ci": 1, 25 "latin2_czech_cs": 2, 26 "dec8_swedish_ci": 3, 27 "cp850_general_ci": 4, 28 "latin1_german1_ci": 5, 29 "hp8_english_ci": 6, 30 "koi8r_general_ci": 7, 31 "latin1_swedish_ci": 8, 32 "latin2_general_ci": 9, 33 "swe7_swedish_ci": 10, 34 "ascii_general_ci": 11, 35 "ujis_japanese_ci": 12, 36 "sjis_japanese_ci": 13, 37 "cp1251_bulgarian_ci": 14, 38 "latin1_danish_ci": 15, 39 "hebrew_general_ci": 16, 40 "tis620_thai_ci": 18, 41 "euckr_korean_ci": 19, 42 "latin7_estonian_cs": 20, 43 "latin2_hungarian_ci": 21, 44 "koi8u_general_ci": 22, 45 "cp1251_ukrainian_ci": 23, 46 "gb2312_chinese_ci": 24, 47 "greek_general_ci": 25, 48 "cp1250_general_ci": 26, 49 "latin2_croatian_ci": 27, 50 "gbk_chinese_ci": 28, 51 "cp1257_lithuanian_ci": 29, 52 "latin5_turkish_ci": 30, 53 "latin1_german2_ci": 31, 54 "armscii8_general_ci": 32, 55 "utf8_general_ci": 33, 56 "cp1250_czech_cs": 34, 57 //"ucs2_general_ci": 35, 58 "cp866_general_ci": 36, 59 "keybcs2_general_ci": 37, 60 "macce_general_ci": 38, 61 "macroman_general_ci": 39, 62 "cp852_general_ci": 40, 63 "latin7_general_ci": 41, 64 "latin7_general_cs": 42, 65 "macce_bin": 43, 66 "cp1250_croatian_ci": 44, 67 "utf8mb4_general_ci": 45, 68 "utf8mb4_bin": 46, 69 "latin1_bin": 47, 70 "latin1_general_ci": 48, 71 "latin1_general_cs": 49, 72 "cp1251_bin": 50, 73 "cp1251_general_ci": 51, 74 "cp1251_general_cs": 52, 75 "macroman_bin": 53, 76 //"utf16_general_ci": 54, 77 //"utf16_bin": 55, 78 //"utf16le_general_ci": 56, 79 "cp1256_general_ci": 57, 80 "cp1257_bin": 58, 81 "cp1257_general_ci": 59, 82 //"utf32_general_ci": 60, 83 //"utf32_bin": 61, 84 //"utf16le_bin": 62, 85 "binary": 63, 86 "armscii8_bin": 64, 87 "ascii_bin": 65, 88 "cp1250_bin": 66, 89 "cp1256_bin": 67, 90 "cp866_bin": 68, 91 "dec8_bin": 69, 92 "greek_bin": 70, 93 "hebrew_bin": 71, 94 "hp8_bin": 72, 95 "keybcs2_bin": 73, 96 "koi8r_bin": 74, 97 "koi8u_bin": 75, 98 "utf8_tolower_ci": 76, 99 "latin2_bin": 77, 100 "latin5_bin": 78, 101 "latin7_bin": 79, 102 "cp850_bin": 80, 103 "cp852_bin": 81, 104 "swe7_bin": 82, 105 "utf8_bin": 83, 106 "big5_bin": 84, 107 "euckr_bin": 85, 108 "gb2312_bin": 86, 109 "gbk_bin": 87, 110 "sjis_bin": 88, 111 "tis620_bin": 89, 112 //"ucs2_bin": 90, 113 "ujis_bin": 91, 114 "geostd8_general_ci": 92, 115 "geostd8_bin": 93, 116 "latin1_spanish_ci": 94, 117 "cp932_japanese_ci": 95, 118 "cp932_bin": 96, 119 "eucjpms_japanese_ci": 97, 120 "eucjpms_bin": 98, 121 "cp1250_polish_ci": 99, 122 //"utf16_unicode_ci": 101, 123 //"utf16_icelandic_ci": 102, 124 //"utf16_latvian_ci": 103, 125 //"utf16_romanian_ci": 104, 126 //"utf16_slovenian_ci": 105, 127 //"utf16_polish_ci": 106, 128 //"utf16_estonian_ci": 107, 129 //"utf16_spanish_ci": 108, 130 //"utf16_swedish_ci": 109, 131 //"utf16_turkish_ci": 110, 132 //"utf16_czech_ci": 111, 133 //"utf16_danish_ci": 112, 134 //"utf16_lithuanian_ci": 113, 135 //"utf16_slovak_ci": 114, 136 //"utf16_spanish2_ci": 115, 137 //"utf16_roman_ci": 116, 138 //"utf16_persian_ci": 117, 139 //"utf16_esperanto_ci": 118, 140 //"utf16_hungarian_ci": 119, 141 //"utf16_sinhala_ci": 120, 142 //"utf16_german2_ci": 121, 143 //"utf16_croatian_ci": 122, 144 //"utf16_unicode_520_ci": 123, 145 //"utf16_vietnamese_ci": 124, 146 //"ucs2_unicode_ci": 128, 147 //"ucs2_icelandic_ci": 129, 148 //"ucs2_latvian_ci": 130, 149 //"ucs2_romanian_ci": 131, 150 //"ucs2_slovenian_ci": 132, 151 //"ucs2_polish_ci": 133, 152 //"ucs2_estonian_ci": 134, 153 //"ucs2_spanish_ci": 135, 154 //"ucs2_swedish_ci": 136, 155 //"ucs2_turkish_ci": 137, 156 //"ucs2_czech_ci": 138, 157 //"ucs2_danish_ci": 139, 158 //"ucs2_lithuanian_ci": 140, 159 //"ucs2_slovak_ci": 141, 160 //"ucs2_spanish2_ci": 142, 161 //"ucs2_roman_ci": 143, 162 //"ucs2_persian_ci": 144, 163 //"ucs2_esperanto_ci": 145, 164 //"ucs2_hungarian_ci": 146, 165 //"ucs2_sinhala_ci": 147, 166 //"ucs2_german2_ci": 148, 167 //"ucs2_croatian_ci": 149, 168 //"ucs2_unicode_520_ci": 150, 169 //"ucs2_vietnamese_ci": 151, 170 //"ucs2_general_mysql500_ci": 159, 171 //"utf32_unicode_ci": 160, 172 //"utf32_icelandic_ci": 161, 173 //"utf32_latvian_ci": 162, 174 //"utf32_romanian_ci": 163, 175 //"utf32_slovenian_ci": 164, 176 //"utf32_polish_ci": 165, 177 //"utf32_estonian_ci": 166, 178 //"utf32_spanish_ci": 167, 179 //"utf32_swedish_ci": 168, 180 //"utf32_turkish_ci": 169, 181 //"utf32_czech_ci": 170, 182 //"utf32_danish_ci": 171, 183 //"utf32_lithuanian_ci": 172, 184 //"utf32_slovak_ci": 173, 185 //"utf32_spanish2_ci": 174, 186 //"utf32_roman_ci": 175, 187 //"utf32_persian_ci": 176, 188 //"utf32_esperanto_ci": 177, 189 //"utf32_hungarian_ci": 178, 190 //"utf32_sinhala_ci": 179, 191 //"utf32_german2_ci": 180, 192 //"utf32_croatian_ci": 181, 193 //"utf32_unicode_520_ci": 182, 194 //"utf32_vietnamese_ci": 183, 195 "utf8_unicode_ci": 192, 196 "utf8_icelandic_ci": 193, 197 "utf8_latvian_ci": 194, 198 "utf8_romanian_ci": 195, 199 "utf8_slovenian_ci": 196, 200 "utf8_polish_ci": 197, 201 "utf8_estonian_ci": 198, 202 "utf8_spanish_ci": 199, 203 "utf8_swedish_ci": 200, 204 "utf8_turkish_ci": 201, 205 "utf8_czech_ci": 202, 206 "utf8_danish_ci": 203, 207 "utf8_lithuanian_ci": 204, 208 "utf8_slovak_ci": 205, 209 "utf8_spanish2_ci": 206, 210 "utf8_roman_ci": 207, 211 "utf8_persian_ci": 208, 212 "utf8_esperanto_ci": 209, 213 "utf8_hungarian_ci": 210, 214 "utf8_sinhala_ci": 211, 215 "utf8_german2_ci": 212, 216 "utf8_croatian_ci": 213, 217 "utf8_unicode_520_ci": 214, 218 "utf8_vietnamese_ci": 215, 219 "utf8_general_mysql500_ci": 223, 220 "utf8mb4_unicode_ci": 224, 221 "utf8mb4_icelandic_ci": 225, 222 "utf8mb4_latvian_ci": 226, 223 "utf8mb4_romanian_ci": 227, 224 "utf8mb4_slovenian_ci": 228, 225 "utf8mb4_polish_ci": 229, 226 "utf8mb4_estonian_ci": 230, 227 "utf8mb4_spanish_ci": 231, 228 "utf8mb4_swedish_ci": 232, 229 "utf8mb4_turkish_ci": 233, 230 "utf8mb4_czech_ci": 234, 231 "utf8mb4_danish_ci": 235, 232 "utf8mb4_lithuanian_ci": 236, 233 "utf8mb4_slovak_ci": 237, 234 "utf8mb4_spanish2_ci": 238, 235 "utf8mb4_roman_ci": 239, 236 "utf8mb4_persian_ci": 240, 237 "utf8mb4_esperanto_ci": 241, 238 "utf8mb4_hungarian_ci": 242, 239 "utf8mb4_sinhala_ci": 243, 240 "utf8mb4_german2_ci": 244, 241 "utf8mb4_croatian_ci": 245, 242 "utf8mb4_unicode_520_ci": 246, 243 "utf8mb4_vietnamese_ci": 247, 244 "gb18030_chinese_ci": 248, 245 "gb18030_bin": 249, 246 "gb18030_unicode_520_ci": 250, 247 "utf8mb4_0900_ai_ci": 255, 248} 249 250// A denylist of collations which is unsafe to interpolate parameters. 251// These multibyte encodings may contains 0x5c (`\`) in their trailing bytes. 252var unsafeCollations = map[string]bool{ 253 "big5_chinese_ci": true, 254 "sjis_japanese_ci": true, 255 "gbk_chinese_ci": true, 256 "big5_bin": true, 257 "gb2312_bin": true, 258 "gbk_bin": true, 259 "sjis_bin": true, 260 "cp932_japanese_ci": true, 261 "cp932_bin": true, 262 "gb18030_chinese_ci": true, 263 "gb18030_bin": true, 264 "gb18030_unicode_520_ci": true, 265} 266