如何在GetSchema(“Columns”)COLUMN_DEFAULT中区分NULL和空字符串

时间:2015-03-31 14:12:13

标签: mysql database-schema mysql.data

我正在编写一些代码,必须从MySql数据库中检索模式(稍后将移植到其他数据库)。 除了COLUMN_DEFAULT之外,这一切都正常工作 - 这似乎为所有可以为空的Text和VarChar项返回一个空字符串,无论实际默认值是NULL还是''。

    CREATE TABLE `Schedule` (
      `idSchedule` int(11) NOT NULL AUTO_INCREMENT,
      `ActionDate` datetime NOT NULL,
      `RepeatType` int(11) NOT NULL DEFAULT '0',
      `Task` varchar(45) NOT NULL,
      `Url` varchar(45) DEFAULT NULL,
      `Parameters` text,
      `Post` tinyint(1) NOT NULL DEFAULT '0',
      PRIMARY KEY (`idSchedule`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;


    using(MySqlConnection conn = new MySqlConnection(connectionString)) {
        conn.Open();
        DataTable cols = conn.GetSchema("Columns");
        foreach(DataRow c in cols.Select("TABLE_NAME = 'Schedule' AND COLUMN_NAME = 'Url'")) {
            Console.WriteLine(c["COLUMN_DEFAULT"] == System.DBNull.Value ? "null" : "'" + c["COLUMN_DEFAULT"] + "'");
        }
    }

输出''。

请注意,information_schema列表在COLUMN_DEFAULT中显示NULL

如果我那么做

    ALTER TABLE `Schedule` CHANGE COLUMN `Url` `Url` VARCHAR(45) NULL DEFAULT NULL

它仍然输出''。

请注意,information_schema Columns表仍显示COLUMN_DEFAULT中的NULL

如果我那么做

    ALTER TABLE `Schedule` CHANGE COLUMN `Url` `Url` VARCHAR(45) NULL DEFAULT ''

它仍然输出''。

现在,information_schema Columns表在COLUMN_DEFAULT

中显示为空白

我在ClearOs上使用MySql服务器5.1.73,MySql.Data 6.9.5.0。

0 个答案:

没有答案