mysql5.7 BLOB, TEXT, GEOMETRY or JSON can‘t have a default value

问题

mysql 5.7 创建text字段的时候,报错。不支持设置默认值。

bash 复制代码
 [1101] [42000]: BLOB, TEXT, GEOMETRY or JSON column 'xxx' can't have a default value

测试1

你能给mysq5.7 8.0 的 BLOB, TEXT, GEOMETRY, and JSON data types, 字段配置默认值 NULL

bash 复制代码
mysql 5.7.44
============
mysql [localhost:5744] {msandbox} (test) > CREATE TABLE t1_default (b BLOB DEFAULT null,t TEXT DEFAULT null,j JSON DEFAULT null,p POINT DEFAULT null);
Query OK, 0 rows affected (0.01 sec)

mysql [localhost:5744] {msandbox} (test) > show create table t1_defaultG
*************************** 1. row ***************************
       Table: t1_default
Create Table: CREATE TABLE `t1_default` (
  `b` blob,
  `t` text,
  `j` json DEFAULT NULL,
  `p` point DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1

mysql 8.0.13
============
mysql [localhost:8013] {msandbox} (test) > CREATE TABLE t1_default (b BLOB DEFAULT null,t TEXT DEFAULT null,j JSON DEFAULT null,p POINT DEFAULT null);
Query OK, 0 rows affected (0.11 sec)

mysql [localhost:8013] {msandbox} (test) > show create table t1_defaultG
*************************** 1. row ***************************
       Table: t1_default
Create Table: CREATE TABLE `t1_default` (
  `b` blob,
  `t` text,
  `j` json DEFAULT NULL,
  `p` point DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

测试2

在MySQL 8.0.13版本, 之前 BLOB, TEXT, GEOMETRY, and JSON 不能配置非null 的默认值,包括表达式。

bash 复制代码
mysql 5.7.44
============
mysql [localhost:5744] {msandbox} (test) > CREATE TABLE t1_default (b BLOB DEFAULT 'Blob',t TEXT DEFAULT 'Text',j JSON DEFAULT '{"key1": "value1", "key2": "value2"}',p POINT DEFAULT 'Point(0,0)');
ERROR 1101 (42000): BLOB, TEXT, GEOMETRY or JSON column 'b' can't have a default value
mysql [localhost:5744] {msandbox} (test) > CREATE TABLE t2_default(b BLOB DEFAULT ('Blob'),t TEXT DEFAULT ('Text'),j JSON DEFAULT ('{"key1": "value1", "key2": "value2"}'),p POINT DEFAULT (Point(0,0)));
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '('Blob'),t TEXT DEFAULT ('Text'),j JSON DEFAULT ('{"key1": "value1", "key2": "va' at line 1

mysql 8.0.12
============
mysql [localhost:8012] {msandbox} (test) > CREATE TABLE t1_default (b BLOB DEFAULT 'Blob',t TEXT DEFAULT 'Text',j JSON DEFAULT '{"key1": "value1", "key2": "value2"}',p POINT DEFAULT 'Point(0,0)');
ERROR 1101 (42000): BLOB, TEXT, GEOMETRY or JSON column 'b' can't have a default value

mysql [localhost:8012] {msandbox} (test) > CREATE TABLE t2_default(b BLOB DEFAULT ('Blob'),t TEXT DEFAULT ('Text'),j JSON DEFAULT ('{"key1": "value1", "key2": "value2"}'),p POINT DEFAULT (Point(0,0)));
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '('Blob'),t TEXT DEFAULT ('Text'),j JSON DEFAULT ('{"key1": "value1", "key2": "va' at line 1

测试三

在MySQL 8.0.13之后 BLOB, TEXT, GEOMETRY, and JSON data types 不能直接配置非null 默认值。

bash 复制代码
mysql 8.0.13
============
mysql [localhost:8013] {msandbox} (test) > CREATE TABLE t1_default (b BLOB DEFAULT 'Blob',t TEXT DEFAULT 'Text',j JSON DEFAULT '{"key1": "value1", "key2": "value2"}',p POINT DEFAULT 'Point(0,0)');
ERROR 1101 (42000): BLOB, TEXT, GEOMETRY or JSON column 'b' can't have a default value

mysql 8.0.14
============
mysql [localhost:8014] {msandbox} (test) > CREATE TABLE t1_default (b BLOB DEFAULT 'Blob',t TEXT DEFAULT 'Text',j JSON DEFAULT '{"key1": "value1", "key2": "value2"}',p POINT DEFAULT 'Point(0,0)');
ERROR 1101 (42000): BLOB, TEXT, GEOMETRY or JSON column 'b' can't have a default value

mysql 8.0.35
============
mysql [localhost:8035] {msandbox} (test) > CREATE TABLE t1_default (b BLOB DEFAULT 'Blob',t TEXT DEFAULT 'Text',j JSON DEFAULT '{"key1": "value1", "key2": "value2"}',p POINT DEFAULT 'Point(0,0)');
ERROR 1101 (42000): BLOB, TEXT, GEOMETRY or JSON column 'b' can't have a default value

测试4

在MySQL 8.0.13之后包括( 8.0.13) BLOB, TEXT, GEOMETRY, and JSON data types 不能配置表达式的默认值。

bash 复制代码
mysql 8.0.13
============
              mysql [localhost:8013] {msandbox} (test) > CREATE TABLE t2_default(b BLOB DEFAULT ('Blob'),t TEXT DEFAULT ('Text'),j JSON DEFAULT ('{"key1": "value1", "key2": "value2"}'),p POINT DEFAULT (Point(0,0)));
Query OK, 0 rows affected (0.07 sec)
mysql [localhost:8013] {msandbox} (test) > show create table t2_defaultG
*************************** 1. row ***************************
       Table: t2_default
Create Table: CREATE TABLE `t2_default` (
  `b` blob DEFAULT (_utf8mb4'Blob'),
  `t` text DEFAULT (_utf8mb4'Text'),
  `j` json DEFAULT (_utf8mb4'{"key1": "value1", "key2": "value2"}'),
  `p` point DEFAULT (point(0,0))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.01 sec)

mysql 8.0.14
============
mysql [localhost:8014] {msandbox} (test) > CREATE TABLE t2_default(b BLOB DEFAULT ('Blob'),t TEXT DEFAULT ('Text'),j JSON DEFAULT ('{"key1": "value1", "key2": "value2"}'),p POINT DEFAULT (Point(0,0)));
Query OK, 0 rows affected (0.03 sec)
mysql [localhost:8014] {msandbox} (test) > show create table t2_defaultG
*************************** 1. row ***************************
       Table: t2_default
Create Table: CREATE TABLE `t2_default` (
  `b` blob DEFAULT (_utf8mb4'Blob'),
  `t` text DEFAULT (_utf8mb4'Text'),
  `j` json DEFAULT (_utf8mb4'{"key1": "value1", "key2": "value2"}'),
  `p` point DEFAULT (point(0,0))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.01 sec)

mysql 8.0.35
============
mysql [localhost:8035] {msandbox} (test) > CREATE TABLE t2_default(b BLOB DEFAULT ('Blob'),t TEXT DEFAULT ('Text'),j JSON DEFAULT ('{"key1": "value1", "key2": "value2"}'),p POINT DEFAULT (Point(0,0)));
Query OK, 0 rows affected (0.03 sec)
mysql [localhost:8035] {msandbox} (test) > show create table t2_defaultG
*************************** 1. row ***************************
       Table: t2_default
Create Table: CREATE TABLE `t2_default` (
  `b` blob DEFAULT (_utf8mb4'Blob'),
  `t` text DEFAULT (_utf8mb4'Text'),
  `j` json DEFAULT (_utf8mb4'{"key1": "value1", "key2": "value2"}'),
  `p` point DEFAULT (point(0,0))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.02 sec)
相关推荐
啊森要自信6 分钟前
【MySQL 数据库】MySQL索引特性(二)页目录&&(B和B+树)&&(非)聚簇索引 && 索引操作
android·数据库·sql·mysql·adb·数据库架构
FJW0208141 小时前
Mysql集成技术
linux·mysql·云原生
周航宇JoeZhou8 小时前
JP3-3-MyClub后台后端(二)
java·mysql·vue·ssm·springboot·项目·myclub
-SGlow-10 小时前
MySQL相关概念和易错知识点(3)(表内容的CURD、内置函数)
linux·运维·服务器·数据库·mysql
飞翔的佩奇10 小时前
基于SpringBoot+MyBatis+MySQL+VUE实现的经方药食两用服务平台管理系统(附源码+数据库+毕业论文+部署教程+配套软件)
数据库·vue.js·spring boot·mysql·毕业设计·mybatis·经方药食两用平台
孫治AllenSun13 小时前
【Mysql】字段隐式转换对where条件和join关联条件的影响
数据库·mysql·oracle
Doris_LMS14 小时前
保姆级别IDEA关联数据库方式、在IDEA中进行数据库的可视化操作(包含图解过程)
java·mysql·postgresql
2301_7930868714 小时前
Mysql group by
数据库·mysql
_码农1213815 小时前
spring boot + mybatis + mysql 只有一个实体类的demo
spring boot·mysql·mybatis
IT-david18 小时前
MySQL分析步
mysql