在调用以前同事的一个接口时,发现使用MySQL的存储过程插入中文时报错。
错误代码: 1366
Incorrect string value: '\xE6\x88\x91%$#...' for column 'title' at row 1
在title中插入英文和数字都没问题,当包含中文时就会报错。
初时以为数据库字符集的问题。
SHOW VARIABLES LIKE 'character%';
SHOW VARIABLES LIKE 'collation_%';
发现character_set_database和character_set_system是latin1,通过SET character_set_database = utf8;和SET character_set_server = utf8;后问题依旧。
又将目光转向是否直接能insert中文数据到库中,发现是可以的。
即存储过程写法有问题,通过调试了几次后,发现DECLARE title VARCHAR(100); 有问题。
后来修改为
DECLARE title VARCHAR(100) character set utf8;
重建存储过程,问题解决。
最后建议互联网项目不要使用存储过程,第一难以调试,第二维护成本高,第三对于频繁修改修改需求的项目来说,而开发人员又不熟悉存储过程的话简直是地狱。