1366 Incorrect string value: '\xE6\x9C\xB1\xE8\x8C\xB5' for column 'NAME' at row 1
一、向表中添加数据时报错
1.查看表结构
SHOW CREATE TABLE beauty;
CREATE TABLE `beauty` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`NAME` VARCHAR(15) NOT NULL,
`phone` VARCHAR(15) DEFAULT NULL,
`birth` DATE DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `phone` (`phone`)
) ENGINE=INNODB DEFAULT CHARSET=latin1
2.修改表字符编码
ALTER TABLE beauty DEFAULT CHARACTER SET 'utf8';
3.执行,失败——查看表结构
CREATE TABLE `beauty` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`NAME` VARCHAR(15) CHARACTER SET latin1 NOT NULL,
`phone` VARCHAR(15) CHARACTER SET latin1 DEFAULT NULL,
`birth` DATE DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `phone` (`phone`)
) ENGINE=INNODB DEFAULT CHARSET=utf8
4.修改列字符编码
ALTER TABLE beauty CHANGE NAME NAME VARCHAR(15) CHARACTER SET 'utf8';
ALTER TABLE beauty CHANGE phone phone VARCHAR(15) CHARACTER SET 'utf8';
5.执行——成功
(没截图)
二、调用存储过程时报错
CALL get_phone(1,@name,@phone);
SELECT @name,@phone;
1.修改my.ini文件配置把默认字符集设置为utf8——没用
![](https://i-blog.csdnimg.cn/blog_migrate/0de8b9b264db8968320b3f8ccee4ce15.png)
![](https://i-blog.csdnimg.cn/blog_migrate/76ee9fb202fd10ecddead81593eeef94.png)
2.涉及【mysql配置文件设置了utf8但无效】关闭服务-重新安装mysql-暂且不述——没用
3.直接修改server和database的字符集
SET character_set_server = 'utf8';
SET character_set_database = 'utf8';
其中修改database字符集时有警告
Warning Code : 1681
Updating 'character_set_database' is deprecated. It will be made read-only in a future release.
警告代码 : 1681
更新'character_set_database'已被废弃。在未来的版本中,它将成为只读的。
查看字符集
SHOW VARIABLES LIKE '%char%';
修改成功——但没用
4.最后解决方法——在创建存储过程时OUT后面添加字符集设置
DELIMITER //
CREATE PROCEDURE get_phone(IN id INT,OUT NAME VARCHAR(15),OUT phone VARCHAR(15) CHARACTER SET utf8)
BEGIN
SELECT b.name,b.phone INTO NAME,phone
FROM beauty b
WHERE b.id = id ;
END //
DELIMITER;
成功:↓
![](https://i-blog.csdnimg.cn/blog_migrate/c424b42a4a84a6e0e5fe1257062d3970.png)