【发布时间】:2017-03-18 15:39:13
【问题描述】:
我正在向我的数据库中插入字符串,但由于字符串字节序列无效而出现 MySQL 1366 错误。
2016/11/04 13:33:40 Error 1366: Incorrect string value: '\x89PNG\x0D\x0A...' for column 'text' at row 1
2016/11/04 13:33:56 Error 1366: Incorrect string value: '\xB6\xEB\xE4\x0B\x92\xEE...' for column 'text' at row 1
2016/11/04 13:33:56 Error 1366: Incorrect string value: '\xFF\xD8\xFF\xE0\x00\x10...' for column 'text' at row 1
2016/11/04 13:34:35 Error 1366: Incorrect string value: '\x9C]\x91\xD1k\xC2...' for column 'text' at row 1
我的 MySQL 配置设置为 utf8mb4,如下所示:
mysql> SHOW VARIABLES LIKE 'character_set%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
我的数据库连接池如下所示:
db, err = sql.Open("mysql", config.User+":"+config.Password+"@tcp("+config.Host+")/"+config.Database)
if err != nil {
log.Fatal(err)
}
db.Exec("SET NAMES 'utf8mb4'; SET CHARACTER SET utf8mb4;")
我还缺少什么?
【问题讨论】:
-
我遇到了同样的问题,结果发现,不知何故,控制字符被引入到字符串中(在我的特殊情况下,当从 MS-Word 复制 formatted 文本时进入我的网页的输入字段)。就我而言,解决方案是在客户端过滤掉控制字符。