【发布时间】:2015-03-16 02:59:16
【问题描述】:
我试图做的是避免在 INSERT 中列出我的 TEXT 列,它们会有一个默认的 ''(空字符串)。
我设法为我的 TEXT 列设置(见下文)一个默认的 '' 值,但它产生了一个警告,我看不到我的表结构发生了什么变化。
请检查下面的代码以重现问题。
DROP TABLE IF EXISTS `text_test`;
CREATE TABLE `text_test` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`text` TEXT NOT NULL,
PRIMARY KEY (`id`)
)
COLLATE='utf8_unicode_ci'
ENGINE=InnoDB
;
-- created OK
SHOW CREATE TABLE `text_test`;
-- CREATE TABLE `text_test` (
-- `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
-- `text` text COLLATE utf8_unicode_ci NOT NULL,
-- PRIMARY KEY (`id`)
-- ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
-- no surprises here...
INSERT INTO `text_test` () VALUES ();
-- warning: text has no default value
SELECT * FROM `text_test`;
-- id=1, text=''
ALTER TABLE `text_test`
CHANGE COLUMN `text` `text` TEXT NOT NULL DEFAULT '' COLLATE 'utf8_unicode_ci' AFTER `id`;
-- warning: blob/text cannot have default...
SHOW CREATE TABLE `text_test`;
-- CREATE TABLE `text_test` (
-- `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
-- `text` text COLLATE utf8_unicode_ci NOT NULL,
-- PRIMARY KEY (`id`)
-- ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
-- no surprises, seems like the table did not change at all...
INSERT INTO `text_test` () VALUES ();
-- no warning generated, but why if the table structure is still the same??
SELECT * FROM `text_test`;
-- id=1, text=''
-- id=2, text=''
我的服务器信息:
SHOW VARIABLES LIKE "%version%";
-- "Variable_name" "Value"
-- "innodb_version" "5.1.73-14.6"
-- "protocol_version" "10"
-- "version" "5.1.73-rel14.11-log"
-- "version_comment" "(Percona Server (GPL), 14.11)"
-- "version_compile_machine" "x86_64"
-- "version_compile_os" "debian-linux-gnu"
【问题讨论】:
-
你不能给 TEXT 列一个默认值
-
@Umair 和 @Strawberry 感谢 cmets ...这是一个类似的问题,但并不完全相同。我试图理解为什么我的第一个
INSERT会生成警告,而我的第二个INSERT不会生成警告,如果它们相同并且理论上表格相同...任何帮助将不胜感激!谢谢