当前位置: 首页 > 知识库问答 >
问题:

Voyager数据库和MariaDB服务器

鲁博瀚
2023-03-14

10.1.28马里亚布

我正在尝试在voyager管理面板中创建一个新表,但我不断收到错误:

通用的异常:执行“CREATE TABLE newReport(id INT UNSIGNED AUTO_INCREMENT NOT NULL,owner_id INT DEFAULT NULL,title VARCHAR(166)”时发生异常默认为NULL,描述文本默认为NULL,报告json默认为NULL,在时间戳NULL默认为NULL时创建,在时间戳NULL默认为NULL时更新,在时间戳NULL默认为NULL时删除,索引newreport\u所有者\u id\u索引(所有者\u id),主键(id))默认字符集utf8校对utf8\u unicode\u ci引擎=InnoDB':SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;检查与您的MariaDB服务器版本相对应的手册,以获得正确的语法,以便在第1行的“json DEFAULT NULL,在时间戳NULL处创建\u DEFAULT NULL,在时间戳处更新\u”

或者SQL语法错误的变体,这取决于我正在尝试的内容。

我正在使用Xampp,还没有安装MariaDB服务器,我需要使用MariaDB服务器吗?还是我的问题是别的?

表格截图

如果删除json数据类型,错误将变为:

通用的异常:执行“CREATE TABLE newReport(id INT UNSIGNED AUTO_INCREMENT NOT NULL,owner_id INT DEFAULT NULL,title VARCHAR(166)”时发生异常不为NULL,说明文本不为NULL,报告文本不为NULL,在时间戳默认“当前日期”时创建,在时间戳为NULL时更新,在时间戳为NULL时删除,在时间戳为NULL时删除,索引为newreport\u owner\u id\u INDEX(owner\u id),主键(id))默认字符集utf8 COLLATE utf8\u unicode\u ci ENGINE=InnoDB:SQLSTATE[42000]:语法错误或访问冲突:1067“created_at”的默认值无效

共有1个答案

鲁浩言
2023-03-14

MySQL 5.7中引入了JSON数据类型。

此数据类型在MySQL的早期版本(5.6或更早版本)中不可用,并且还没有在MariaDB中实现(至少在10.2版本之前),但是MariaDB已经添加了一些JSON函数,例如JSON_VALID。)

编辑

MariaDB在10.2.7版本中增加了对JSON数据类型的支持

https://mariadb.com/kb/en/library/json-data-type/

要检查所连接的MySQL/MariaDB服务器的版本,请执行以下操作:

 SHOW VARIABLES LIKE 'version'

作为测试,您可以将JSON数据类型替换为您知道支持的另一种数据类型,例如VARCHAR(20)TEXT

如果MySQL/MariaDB服务器不支持json数据类型,则可以使用另一种文本类型。

在我看来,这个错误是在'json处标记SQL语法中的一个问题。这就是我们希望找到有效数据类型的地方。我的建议是作为一个测试,用一个已知良好的数据类型替换它,目的是确定这是否是问题所在。

从错误消息中,似乎服务器是MariaDB(不是MySQL)

我们看到正在执行的语句:

CREATE TABLE newReport 
( id          INT UNSIGNED AUTO_INCREMENT NOT NULL
, owner_id    INT DEFAULT NULL
, title       VARCHAR(166) DEFAULT NULL
, description text DEFAULT NULL
, report      json DEFAULT NULL
, created_at  timestamp null DEFAULT NULL
, updated_at  timestamp null DEFAULT NULL
, deleted_at  timestamp null DEFAULT NULL
, INDEX newreport_owner_id_index (owner_id)
, PRIMARY KEY(id)
) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci
ENGINE = InnoDB

错误呢

: SQLSTATE[42000]: 
Syntax error or access violation:
  1064 You have an error in your SQL syntax;
  check the manual that corresponds to your
  MariaDB server version for the right syntax to use near 

以及标记错误的位置

'json DEFAULT NULL ...

编辑

json替换为text会将错误更改为

1067 Invalid default value for 'created_at'

看起来很奇怪,因为在json处出现语法错误的语句是

  created_at  timestamp null DEFAULT NULL
                                     ^^^^

这本来是可行的,但出于某种原因,现在改为

  created_at timestamp null DEFAULT 'CURRENT_DATE' 
                                    ^^^^^^^^^^^^^^

字符串值“当前日期”不是时间戳的有效值。看起来我们打算引用关键字CURRENT\u TIMESTAMP,而不是字符串文本

  created_at timestamp null DEFAULT CURRENT_TIMESTAMP
                                    ^^^^^^^^^^^^^^^^^
 类似资料:
  • 命令用于删除创建过(已存在)的数据库。删除数据库中的所有表并删除数据库。使用这个语句时要非常小心! 要使用,您需要数据库的权限。 是的同义词。 重要提示:删除数据库时,数据库的用户权限不会自动删除。 语法 示例 在前面的例子中,我们创建了一个数据库名称为。使用以下语句,删除这个数据库。 在执行上面语句后,数据库现在被删除。可以使用命令来验证它。 可以看到数据库在数据库列表中不再有显示。 使用Hei

  • 命令用于选择数据库,如果想在一个数据库上工作,比如:创建表,查询表,更新,创建存储过程等等,那么首先需要选择一个目标数据库。 示例 假设在MariaDB数据库服务器中,存在有多个数据库,我们必须选择一个特定的数据库。 例如,在下图中显示了多个数据库: 这里我们将使用数据库来创建表等。所以需要使用以下命令。 在执行上面查询语句后,就已经选择数据库。之后就可以在里面创建表等数据对象了。执行上面查询语句

  • 在这节中,我们来学习如何在MariaDB中创建一个数据库。 创建一个名称为的数据库。 语法: 示例 或者指定使用默认的字符集来创建数据库: 注意,数据库名称不区分大小写。因此:,以及均表示同一个数据库。 显示数据库 命令用于查看创建的数据库。 语法: 使用MariaDB客户端,执行上面查询语句,得到以下结果 -

  • 我读过萨姆·纽曼的《微服务》一书,在关于分裂整体的一章中,他举了一个“打破外键关系”的例子,他承认跨API进行连接会更慢--但他接着说,如果你的应用程序足够快,它比以前慢有关系吗? 这似乎有点油嘴滑舌?人的经历是什么?您使用了哪些技术来使API联接执行得令人满意?

  • 如果一个微服务只知道它自己的领域,但是有一个数据流需要多个服务以某种方式交互,那该怎么做呢? 假设我们有这样的东西: 为论证起见,假设一个订单发货后,就应该创建发票。 我确实知道这可以被认为是高度基于意见的。但它也有具体的一面,因为微服务不应该做上述的事情。因此,必须有一个“根据定义它应该做什么”,这不是基于意见的。 开枪啊。

  • 一、Attach数据库: ATTACH DATABASE语句添加另外一个数据库文件到当前的连接中,如果文件名为":memory:",我们可以将其视为内存数据库,内存数据库无法持久化到磁盘文件上。如果操作Attached数据库中的表,则需要在表名前加数据库名,如dbname.table_name。最后需要说明的是,如果一个事务包含多个Attached数据库操作,那么该事务仍然是原子的。见如下示例: