(id sql.CharacterSetID)
| 43 | } |
| 44 | |
| 45 | func getEncoding(id sql.CharacterSetID) (encoding.Encoding, error) { |
| 46 | switch id { |
| 47 | case sql.CharacterSet_Unspecified, sql.CharacterSet_ascii, sql.CharacterSet_utf8mb3, sql.CharacterSet_utf8mb4: |
| 48 | return encoding.Nop, nil |
| 49 | case sql.CharacterSet_latin1: |
| 50 | // https://dev.mysql.com/doc/refman/8.4/en/charset-we-sets.html |
| 51 | // > MySQL's latin1 is the same as the Windows cp1252 character set. |
| 52 | return charmap.Windows1252, nil |
| 53 | |
| 54 | case sql.CharacterSet_ucs2, sql.CharacterSet_utf16: |
| 55 | // https://dev.mysql.com/doc/refman/8.4/en/charset-unicode-utf16.html |
| 56 | return unicode.UTF16(unicode.BigEndian, unicode.IgnoreBOM), nil |
| 57 | case sql.CharacterSet_utf16le: |
| 58 | // https://dev.mysql.com/doc/refman/8.4/en/charset-unicode-utf16le.html |
| 59 | return unicode.UTF16(unicode.LittleEndian, unicode.IgnoreBOM), nil |
| 60 | case sql.CharacterSet_utf32: |
| 61 | // https://dev.mysql.com/doc/refman/8.4/en/charset-unicode-utf32.html |
| 62 | return utf32.UTF32(utf32.BigEndian, utf32.IgnoreBOM), nil |
| 63 | |
| 64 | // https://dev.mysql.com/doc/refman/8.4/en/faqs-cjk.html |
| 65 | case sql.CharacterSet_gb2312, sql.CharacterSet_gbk: |
| 66 | return simplifiedchinese.GBK, nil |
| 67 | case sql.CharacterSet_gb18030: |
| 68 | return simplifiedchinese.GB18030, nil |
| 69 | case sql.CharacterSet_big5: |
| 70 | return traditionalchinese.Big5, nil |
| 71 | } |
| 72 | return encoding.Nop, fmt.Errorf("%s: %w", id, ErrUnsupported) |
| 73 | } |
| 74 | |
| 75 | func Encode(id sql.CharacterSetID, utf8 string) (string, error) { |
| 76 | en, err := getEncoding(id) |
no outgoing calls
no test coverage detected