我注意到在项目暂存服务器上奇怪的MySQL行为。给出:
create table test_table
(
id int auto_increment,
name varchar(64) not null,
constraint test_table_pk
primary key (id)
);
insert into test_table (id, name)
VALUES (3, 'value 3');
insert into test_table (id, name)
VALUES (5, 'value 5');
insert into test_table (id, name)
VALUES ('value 6 id', 'value 6');
select *
from test_table;
结果:
mysql> select * from test_table;
+----+---------+
| id | name |
+----+---------+
| 3 | value 3 |
| 5 | value 5 |
| 6 | value 6 |
+----+---------+
2 rows in set (0.01 sec)
前两个insert语句按预期正常工作。第三个背后的魔力是什么?它的工作,似乎不正确的类型值被替换为自动增量值。我正在尝试创建DB服务器的Docker版本。但我找不到什么配置选项来启用此行为。第三个insert语句被docker DB示例拒绝,并显示错误消息:
Incorrect Integer value: 'value 6 id' for column 'id'
mysql> SHOW VARIABLES LIKE 'version';
+---------------+-----------+
| Variable_name | Value |
+---------------+-----------+
| version | 5.7.27-30 |
+---------------+-----------+
1 row in set (0.01 sec)
更新
在临时服务器上:
show variables like '%sql_mode%';
退货:
IGNORE_SPACE,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
我的docker-compose.yaml
version: "3.8"
services:
db:
image: percona/percona-server:5.7.27
volumes:
-db-data:/var/lib/mysql
env_file:
- ./db.env
command:
--sql_mode=IGNORE_SPACE,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
ports:
- "3306:3306"
flyway:
image: flyway/flyway:7.15.0
command: migrate
volumes:
- ./../../sql/migrations:/flyway/sql
- ./flyway/conf:/flyway/conf
depends_on:
-db
volumes:
db-data:
有什么想法吗?谢谢
2条答案
按热度按时间fwzugrvs1#
您启用了
STRICT_TRANS_TABLES
,导致无效数据值被拒绝,应将其从列表中删除:Demo here
laximzn52#
这与sql_mode有关。您可以检查两个数据库示例的sql_mode参数来找出其中的秘密。
show variables like '%sql_mode%';