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”的默认值无效
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数据库操作,那么该事务仍然是原子的。见如下示例: