为啥我这有警告?

正在回答

登陆购买课程后可参与讨论,去登陆

3回答

1、报错原因是插入的数据是传进去的的数据编码类型是UTF8MB4,而MySQL里的是UTF8MB3,它建议改编码。

2、办法:

首先查看下mysql字符集 

SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';  

http://img1.sycdn.imooc.com//climg/5cc7f30000018a3503310286.jpg

根据结果,修改我们的创建语句

修改前 = 'CREATE DATABASE IF NOT EXISTS database_name DEFAULT CHARSET utf8 COLLATE utf8_general_ci;'

修改后 = 'CREATE DATABASE IF NOT EXISTS database_name DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_0900_ai_ci;' 

或者这里同学忽略就可以的。

2、警告不会影响结果,而报错会。

如果不存在就创建说明你的意思是如果之前存在可以保留之前的,说明你是允许不创建成功的情况的。

而如果说你一定要创建,可以改成,如果存在这个表我就删除,然后重新创建该表

drop table if exists 表名;

create table 表名(。。)

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • MasonM 提问者 #1
    首先谢谢老师你的解答! 但我还是有疑问: 1:MySQL里的UTF8是UTF8mb3还是UTF8mb4呢,因为我试过用UTF8mb4可以成功没报警告呢。 2:我还是不理解,警告不会影响结果,但报错会是什么意思?能再解释一下吗? 谢谢老师!
    2019-04-30 15:24:18
  • 好帮手慕阿莹 回复 提问者 MasonM #2
    1、抱歉,这里是老师手误写错了,MySQL里的UTF8是UTF8mb4。2、其实同学就可以理解为eclipse中的警告(画黄线的)和报错(画红线的)。警告只是会提示你这样不好,但是就像你其执行上边的代码产生了警告,但代码依然会执行成功,而如果是报错,这个表就不会创建成功。而同学举得这个创建表的例子是因为,我们写的语句是允许它创建不成功的,如果你不写这个表如果存在,而是直接创建,当表存在的时候就会报错了。说明是你必须需要处理的。而警告你可以忽略不管他。如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
    2019-04-30 16:36:31
  • MasonM 提问者 回复 好帮手慕阿莹 #3
    我懂了谢谢老师! 1:那么我还想问一下,为什么视频中的老师直接输入UTF8就可以,而我要用UTF8mb4呢?这是不是因为视频中的老师使用的是MySQL5.7,而我用的是MySQL8.0,版本不同的原因? 2:既然我直接用UTF8创建数据库会报警告,但照样会执行成功,那么他是自动把编码变成UTF8 mb4吗?
    2019-04-30 16:55:55
提问者 MasonM 2019-04-29 21:48:27

另外我想问一下,警告和错误有什么区别?

比如test1这个数据库已经存在,然后

判断数据库名称是否存在,如果不存在则创建

CREATE DATABASE IF NOT EXISTS test1;

如果加了判断,就把错误信息变成了警告,那结果照样是没有创建成功呀?那跟显示错误信息有什么意义?

提问者 MasonM 2019-04-29 21:17:48

但我设置为GBK的话就没问题

http://img1.sycdn.imooc.com//climg/5cc6f9780001572407750111.jpg

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师