MySQL 8.0給開發(fā)方向帶來的一些困擾
MySQL 8.0的特性可謂強(qiáng)大,有一種集中火力的感覺,從整體的架構(gòu)設(shè)計(jì)到功能和參數(shù),可圈可點(diǎn)。
不過我今天從開發(fā)的角度來說一下困擾,畢竟那么新,那么強(qiáng)大,所謂的無縫,平滑還是需要經(jīng)過全面測試,不能浮于紙面。
1:密碼策略插件
MySQL 8.0開始將caching_sha2_password作為默認(rèn)的身份驗(yàn)證插件。如果升級了數(shù)據(jù)庫至8.0版本,對應(yīng)用程序jdbc驅(qū)動兼容性不友好,讓應(yīng)用程序跑起來最快的方法需要將默認(rèn)的caching_sha2_password改為之前的mysql_native_password。
比如:
- ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
也可以在參數(shù)中進(jìn)行設(shè)置,修改my.cnf,重啟服務(wù)即可生效:
- default_authentication_plugin=mysql_native_password
2.JDBC驅(qū)動變更
如果從MySQL5.5升級到5.7,那么驅(qū)動的事情不用擔(dān)心,但是到了8.0,JDBC的驅(qū)動就需要格外注意了,否則很可能有如下的錯誤。
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
對于JDBC的url會有如下的變化:
- String Url="jdbc:mysql://211.159.xxx:33071/maxwell_test?useUnicode=true&characterEncoding=utf-8";
需要調(diào)整為如下的格式:
- String Url="jdbc:mysql://211.159.xxx:33071/maxwell_test?useUnicode=true&characterEncoding=utf-8&useSSL=false&&serverTimezone=GMT";
相應(yīng)的加載驅(qū)動程序則需要
- Class.forName("com.mysql.jdbc.Driver");
修改為:
- Class.forName("com.mysql.cj.jdbc.Driver");
3.整數(shù)類型的長度警告
比如下面的表結(jié)構(gòu),通過workbench等工具導(dǎo)出來格式都差不多,但是在8.0里面執(zhí)行的時候會報警。
- CREATE TABLE `data_payment_history_test` (
- `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID',
- `pid` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '用戶ID',
- 。。。
- `cdate` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創(chuàng)建時間',
- 。。。
- PRIMARY KEY (`id`),
- KEY `idx_credit_overdraw_history__pid` (`pid`)
- ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='支付記錄';
這里主要涉及兩個警告,一個是整數(shù)類型的長度警告,另外一個是字符集警告,
展開來說,整數(shù)類型的長度警告信息為:Integer display width is deprecated and will be removed in a future,意思是int(11)這種寫法已經(jīng)過時了,應(yīng)該直接寫int,bigint
而字符集配置,在MySQL8.0里面默認(rèn)是utf8mb4,如果我們手工寫了utf8類型,會提示:'utf8' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous.
當(dāng)然如果你設(shè)置的全局字符集是utf8,則無警告的情況字符集仍然為utf8.
4.windows安裝版
windows安裝版本一直提供的是32位的,這個是個歷史遺留問題,如果有些同學(xué)為了方便,直接點(diǎn)點(diǎn)點(diǎn),可能把線上環(huán)境部署成32位就尷尬了,oracle的windows版本路子相反,已經(jīng)很早就直接舍棄了32位的版本。
本文轉(zhuǎn)載自微信公眾號「楊建榮的學(xué)習(xí)筆記」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系楊建榮的學(xué)習(xí)筆記公眾號。