具有 DEFAULT NULL 的 VARCHAR 列在 MariaDB 中表现为“NULL”文本

问题描述 投票:0回答:1

我最近在本地计算机上安装了 mariadb-10.6.17-winx64,并且在表列定义为 VARCHAR 且具有 DEFAULT NULL 设置时遇到了意外行为。尽管将该列指定为 DEAFAULT NULL,但它的行为似乎与文本 NULL 相同。在执行 IS NULL 查询时,此问题很明显,该查询意外地不返回这些列的结果。

笔记本文件编码:utf-8-BOM

当我运行以下查询时,根据以下查询检测到 vchar_null 列是否为非空值:(较旧的 mariadb 版本处理得很好):

SELECT
  `c`.`TABLE_SCHEMA` AS `TABLE_SCHEMA`,
  `c`.`TABLE_NAME` AS `table_name`,
  `c`.`COLUMN_NAME` AS `column_name`,
  `c`.`IS_NULLABLE` AS `isnullable`,
  c.DATA_TYPE,
  COALESCE(`c`.`COLUMN_DEFAULT`, '') AS `default_value`,
  (c.COLUMN_DEFAULT IS NULL) AS isnullll,
  (CASE WHEN (`c`.`COLUMN_KEY` = 'PRI') THEN 1 ELSE 0 END) AS `primary_key`
FROM `information_schema`.`COLUMNS` `c`
WHERE (`c`.`TABLE_SCHEMA` = DATABASE()) AND c.TABLE_NAME = 'testnull4'
ORDER BY `c`.`TABLE_NAME`, `c`.`ORDINAL_POSITION`;
CREATE TABLE egisintra.testnull4 (
  test_id int(11) NOT NULL AUTO_INCREMENT,
  vchar_null varchar(255) DEFAULT NULL,
  PRIMARY KEY (test_id)
)
ENGINE = INNODB,
CHARACTER SET utf8mb4,
COLLATE utf8mb4_hungarian_ci;

(c.COLUMN_DEFAULT IS NULL) AS isnullll 列的结果是:0 而不是 1,这就是问题所在。

mariadb
1个回答
0
投票

information_schema 的内容并不总是显而易见的。如果你想查看你的表结构,你应该这样做

show create table testnull4

在本例中,默认值列是一个 string,它显示默认值,就像在创建或更改表中显示的那样。如果为空,则为

NULL
。如果是字符串
'NULL'
,那就是
'NULL'
。如果它是一个表达式,您将看到该表达式。

默认值不能只是一个带有默认实际值的字符串(例如NULL或'NULL');那么就无法显示 CURRENT_TIMESTAMP 或表达式的默认值。

© www.soinside.com 2019 - 2024. All rights reserved.