PDO方式插入中文数据到mysql出现乱码

全部改成utf8了还是报错、网上搜了很多,修改了还是报错,求助各路大神!感谢!

php插入数据报错

clipboard.png

插入前的编码格式

clipboard.png

数据库结构格式

clipboard.png

插入数据的代码

clipboard.png

阅读 5.7k
3 个回答

clipboard.png
看你的代码,在创建表时候没有给表设置字符集,导致存入汉字失败,或者存进去乱码等问题。
建议给表设置默认字符集,具体SQL如下:
给表 userinfo 设置字符集 utf8_general_ci,也可用其他字符集
ALTER TABLE userinfo CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

完了建议查看一下表结构: SHOW CREATE TABLE userinfo;

如果还不行,就给每个字段都设一遍字符集:

例如:修改type的字符集
ALTER TABLE userinfo CHANGE type type VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci;

最后如果还不行,就重新建表吧!

SQL附上:
CREATE TABLE user_info (
id int(10) NOT NULL AUTO_INCREMENT COMMENT 'ID' ,
type char(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT '类型' ,
res char(32) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT '什么鬼?' ,
date char(40) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT '这又是什么?' ,
contact char(30) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT 'o(>ω<)o' ,
phone bigint(12) NOT NULL DEFAULT 0 COMMENT '手机' ,
qq bigint(13) NOT NULL DEFAULT 0 COMMENT 'QQ' ,
PRIMARY KEY (id)
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_unicode_ci
COMMENT='用户详情表'
AUTO_INCREMENT= 1
ROW_FORMAT=COMPACT;

set names utf8改成set names utf8mb4呢

数据库设计没问题
需要在php文件中设置下编码格式为UTF-8
$pdo->exec('set names utf8');
这样就ok了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题