当前位置: 首页 > 科技观察

MySQL8.0给发展方向带来的一些困扰

时间:2023-03-13 19:40:32 科技观察

MySQL8.0功能强大,有一种火力集中的感觉。从整体架构设计到功能参数,都可圈可点。但是今天我就从发展的角度来说说烦恼。毕竟,它是如此新颖和强大。所谓天衣无缝、畅通无阻,还需要充分检验,不能纸上谈兵。1:密码策略插件MySQL8.0开始使用caching_sha2_password作为默认的认证插件。如果数据库升级到8.0版本,对应用jdbc驱动兼容性不友好。使应用程序运行最快的方法需要将默认的caching_sha2_password更改为以前的mysql_native_password。例如:ALTERUSER'root'@'localhost'IDENTIFIEDWITHmysql_native_passwordBY'password';也可以在参数里设置,修改my.cnf,重启服务生效:default_authentication_plugin=mysql_native_password2。如果JDBC驱动从MySQL5.5改到5.7,那就不用管驱动了,但是到了8.0,JDBC驱动就需要特别注意了,不然很可能会出现下面的错误。加载类“com.mysql.jdbc.Driver”。这已被弃用。新的驱动程序类是“com.mysql.cj.jdbc.Driver”。驱动程序通过SPI自动注册,通常不需要手动加载驱动程序类。JDBC的url会有如下变化:StringUrl="jdbc:mysql://211.159.xxx:33071/maxwell_test?useUnicode=true&characterEncoding=utf-8";需要调整为如下格式:StringUrl="jdbc:mysql://211.159.xxx:33071/maxwell_test?useUnicode=true&characterEncoding=utf-8&useSSL=false&&serverTimezone=GMT";对应的加载驱动需要Class.forName("com.mysql.jdbc.Driver");修改为:Class.forName("com.mysql.cj.jdbc.Driver");3.整数类型的长度警告比如下面的表结构,workbench等工具导出的格式类似,但是在8.0会执行报警。CREATETABLE`data_payment_history_test`(`id`bigint(20)unsignedNOTNULLAUTO_INCREMENTCOMMENT'自增ID',`pid`int(11)unsignedNOTNULLDEFAULT'0'COMMENT'用户ID',...`cdate`datetimeNOTNULLDEFAULTCURRENT_TIMESTAMPCOMMENT'创建时间',……PRIMARYKEY(`id`),KEY`idx_credit_overdraw_history__pid`(`pid`))ENGINE=InnoDBAUTO_INCREMENT=1DEFAULTCHARSET=utf8COMMENT='付款记录';这里主要涉及两个警告,一个是整数类型的长度警告,一个是字符集警告,展开一下,整数类型的长度警告信息是:Integerdisplaywidthisdeprecatedandwillberemovedinfuture,也就是说int(11)的写法已经过时了,应该直接写int、bigint和字符集配置,MySQL8.0默认是utf8mb4,如果手动写成utf8类型,会提示:'utf8'目前是字符集UTF8MB3的别名,但在未来的版本中将成为UTF8MB4的别名。请考虑使用UTF8MB4以便明确。当然,如果你设置的全局字符集是utf8,没有警告的话,字符集还是utf8.4。如果有的同学为了方便直接点击,将线上环境部署成32位版本可能会比较尴尬。Windows版的Oracle正好相反,32位的版本很早就被废弃了。本文转载自微信公众号《杨建荣的学习笔记》,可通过以下二维码关注。转载本文请联系杨建荣学习笔记公众号。