MySQL 8.0給開發(fā)方向帶來的一些困擾
MySQL 8.0的特性可謂強大,有一種集中火力的感覺,從整體的架構設計到功能和參數(shù),可圈可點。
不過我今天從開發(fā)的角度來說一下困擾,畢竟那么新,那么強大,所謂的無縫,平滑還是需要經過全面測試,不能浮于紙面。
1:密碼策略插件
MySQL 8.0開始將caching_sha2_password作為默認的身份驗證插件。如果升級了數(shù)據庫至8.0版本,對應用程序jdbc驅動兼容性不友好,讓應用程序跑起來最快的方法需要將默認的caching_sha2_password改為之前的mysql_native_password。
比如:
- ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
也可以在參數(shù)中進行設置,修改my.cnf,重啟服務即可生效:
- default_authentication_plugin=mysql_native_password
2.JDBC驅動變更
如果從MySQL5.5升級到5.7,那么驅動的事情不用擔心,但是到了8.0,JDBC的驅動就需要格外注意了,否則很可能有如下的錯誤。
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";
需要調整為如下的格式:
- String Url="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.整數(shù)類型的長度警告
比如下面的表結構,通過workbench等工具導出來格式都差不多,但是在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)這種寫法已經過時了,應該直接寫int,bigint
而字符集配置,在MySQL8.0里面默認是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.
當然如果你設置的全局字符集是utf8,則無警告的情況字符集仍然為utf8.
4.windows安裝版
windows安裝版本一直提供的是32位的,這個是個歷史遺留問題,如果有些同學為了方便,直接點點點,可能把線上環(huán)境部署成32位就尷尬了,oracle的windows版本路子相反,已經很早就直接舍棄了32位的版本。
本文轉載自微信公眾號「楊建榮的學習筆記」,可以通過以下二維碼關注。轉載本文請聯(lián)系楊建榮的學習筆記公眾號。