升級到MySQL5.7版本需注意的問題
升級到MySQL5.7 版本需注意的問題
1)在一個無符號列中插入一個負值
建立具有無符號列的表:CREATE TABLE test (id int unsigned);
插入負值。
以前版本:INSERT INTO test VALUES (-1);
Query OK, 1 row affected, 1 warning (0.01 sec)
MySQL 5.7版本:
INSERT INTO test VALUES (-1);
ERROR 1264 (22003): Out of range value for column 'a' at row 1
2)除以零
建立測試表:CREATE TABLE test2 ( id int unsigned );
嘗試除以零。
先前版本:INSERT INTO test2 VALUES (0/0);
Query OK, 1 row affected (0.01 sec)
MySQL 5.7版本:INSERT INTO test2 VALUES (0/0);
ERROR 1365 (22012): Division by 0
3)在10個字元的列中插入20個字元的字串
建立一個包含10個字元的列的表:CREATE TABLE test3 ( a varchar(10) );
嘗試插入較長的字串。
先前版本:INSERT INTO test3 VALUES ('abcdefghijklmnopqrstuvwxyz');
Query OK, 1 row affected, 1 warning (0.00 sec)
MySQL 5.7版本:INSERT INTO test3 VALUES ('abcdefghijklmnopqrstuvwxyz');
ERROR 1406 (22001): Data too long for column 'a' at row 1
4)將非標準零日期插入日期時間列
建立具有datetime列的表:CREATE TABLE test3 ( a datetime );
插入0000-00-00 00:00:00 。
先前版本:INSERT INTO test3 VALUES ('0000-00-00 00:00:00');
Query OK, 1 row affected, 1 warning (0.00 sec)
MySQL 5.7版本:INSERT INTO test3 VALUES ('0000-00-00 00:00:00');
ERROR 1292 (22007): Incorrect datetime value: '0000-00-00 00:00:00' for column 'a' at row 1
5)使用GROUP BY並選擇一個不明確的列
發生這種情況時的說明不是一部分GROUP BY ,並且沒有聚集函式(例如MIN或MAX )施加到其上。
先前版本:SELECT id, invoice_id, description FROM invoice_line_items GROUP BY invoice_id;
+----+------------+-------------+
| id | invoice_id | description |
+----+------------+-------------+
| 1 | 1 | New socks |
| 3 | 2 | Shoes |
| 5 | 3 | Tie |
+----+------------+-------------+
3 rows in set (0.00 sec)
MySQL 5.7版本:SELECT id, invoice_id, description FROM invoice_line_items GROUP BY invoice_id;
ERROR 1055 (42000): Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'invoice_line_items.description' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
5)mysql5.7版本SQL_MODE
預設情況下,MySQL 5.7包含以下模式:
* ONLY_FULL_GROUP_BY
* STRICT_TRANS_TABLES
* NO_ENGINE_SUBSTITUTION
* NO_AUTO_CREATE_USER
該模式STRICT_TRANS_TABLES也變得更加嚴格,在mysql 5.7中,預設使用的是嚴格模式,有時候可能帶來問題,
比如:
mysql> CREATE TABLE `events_t` (
-> `id` int(11) NOT NULL AUTO_INCREMENT,
-> `event_date` datetime NOT NULL,
-> `profile_id` int(11) DEFAULT NULL,
-> PRIMARY KEY (`id`),
-> KEY `event_date` (`event_date`),
-> KEY `profile_id` (`profile_id`)
-> ) ENGINE=InnoDB DEFAULT CHARSET=latin1
-> ;
Query OK, 0 rows affected (0.02 sec)
mysql> insert into events_t (profile_id) values (1);
ERROR 1364 (HY000): Field 'event_date' doesn't have a default value
這裡日期就必須要有預設值,不能 NULL,但:
mysql> alter table events_t change event_date event_date datetime NOT NULL default '0000-00-00 00:00:00';
ERROR 1067 (42000): Invalid default value for 'event_date'
mysql> alter table events_t change event_date event_date datetime NOT NULL default '2000-00-00 00:00:00';
ERROR 1067 (42000): Invalid default value for 'event_date'
也是不行的,必須要有真實日期預設
mysql> alter table events_t change event_date event_date datetime NOT NULL default '2000-01-01 00:00:00';
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> insert into events_t (profile_id) values (1);
Query OK, 1 row affected (0.00 sec)
因此只有日期格式改為timestamp,或者用NULL,或者在insert的時候用now()產生日期。
6)mysql-connector-java.Jar 儘可能更新到最新版本,以下為官方推薦對應版本列表
Table 2.1 Summary of Connector/J Versions
Table 26.2 MySQL Connector Versions and MySQL Server Versions
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29734436/viewspace-2143828/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Cocospod 升級到指定版本
- 虛擬環境的jupter notebook 版本升級問題
- Mac 升級 PHP 到 7.4 版本MacPHP
- SpringBoot 2.1.0 升級到 2.5.4 遇到的問題彙總Spring Boot
- 【MSSQL】MSSQL 從Express版本升級到Enterprise版本SQLExpress
- 如何將 Ubuntu 版本升級到新版本Ubuntu
- MySQL5.5升級到MySQL5.7踩坑日記MySql
- 應用升級SpringCloud版本時的注意事項(Dalston升級到Edgware)SpringGCCloud
- ArchLinux/Manjaro升級到6.9核心後的問題解決LinuxJAR
- PHP版本升級:從php7.1升級到php7.2PHP
- Centos7 升級openssh到最高版本CentOS
- Swift3.0專案升級到4.2遇到問題Swift
- Laravel 5.5.* 升級到 5.7.* 問題記錄Laravel
- 升級 Node.js 版本遇到的 co 和 pm2 問題解析Node.js
- SAP版本升級,企業需要考慮評估哪些問題?
- npm node升級到最新版本NPM
- 從CentOS 7.0升級到7.7版本CentOS
- MacOs 升級 Git 到最新版本MacGit
- Laravel 5.5 升級到 5.5.42 後遇到的 Cookie 序列化問題LaravelCookie
- Laravel5.5 升級到 5.7 問題及解決方法Laravel
- MacOS升級到Monterey後python SSL握手失敗問題MacPython
- 阿里雲ACK從1.22升級到1.24問題彙總阿里
- 升級mac的PHP版本MacPHP
- Redis的跨版本升級Redis
- 如何升級fedora的版本
- 升級 Homestead box 遇到的 502 問題
- gcc版本升級GC
- node 版本升級
- python版本升級Python
- NiFi版本升級Nifi
- ReactNative升級0.56.0注意問題React
- 寶塔皮膚版本升級實戰教程—升級寶塔皮膚到最新版本
- 使用DBUA升級 Oracle 11.2.0.4到Oracle 19C的問題記錄Oracle
- Android studio 升級到3.1出現的問題Caused by: java.util.NoSuchElementExceptionAndroidJavaException
- 專案升級到.Net8.0 Autofac引發詭異的問題
- ubuntu18.4 升級Python到3.8版本UbuntuPython
- Win10怎麼升級版本 Win10升級版本的方法Win10
- android studio 2.2.3 升級到3.1.2 原有專案編譯問題Android編譯
- 基於Windows的MySQL5.7本地升級WindowsMySql