TEXT列的MySQL默认值行为异常,为什么?

Droperto

我试图做的是避免在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"

MySQL手册:“ BLOB和TEXT列不能具有DEFAULT值”。

对于自动表创建和代码暗示默认值的情况,此警告是有意的。

忽略并继续:)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么需要默认值呢?

来自分类Dev

为什么nullglob不是默认值?

来自分类Dev

列默认值中的MySQL函数

来自分类Dev

为什么列的默认值不适用于Django

来自分类Dev

为什么在实现中允许使用与在接口上定义的默认值不同的默认值?

来自分类Dev

为什么RandomForestClassifier中的max_features的默认值与RandomForestRegressor中的默认值不同?

来自分类Dev

Mysql2 :: Error:BLOB,TEXT,GEOMETRY或JSON列'body'不能具有默认值

来自分类Dev

为什么在访问结构时需要默认值?

来自分类Dev

Java:为什么未使用XX:SurvivorRatio的默认值?

来自分类Dev

为什么要推动匹配Git中的默认值?

来自分类Dev

为什么out参数没有默认值?

来自分类Dev

使用:=时,为什么with = TRUE是默认值?

来自分类Dev

为什么我的argparse不显示默认值?

来自分类Dev

为什么我的DropDownListFor的默认值无法正常工作?

来自分类Dev

为什么constexpr不是所有函数的默认值?

来自分类Dev

为什么constexpr不能只是默认值?

来自分类Dev

为什么FreezeGun不使用SQLAlchemy默认值?

来自分类Dev

为什么Mockito verifyNoMoreInteractions的Scala默认值有问题

来自分类Dev

为什么可选参数的默认值必须为常数?

来自分类Dev

为什么打印屏幕采用默认值

来自分类Dev

为什么`ffmpeg`的`-hide_banner`不是默认值?

来自分类Dev

为什么需要“-人类可读”而不是默认值?

来自分类Dev

express-locale始终返回默认值-为什么?

来自分类Dev

为什么 <value>!0</value> 匹配默认值 0?

来自分类Dev

为什么在注释中禁止 null 作为默认值?

来自分类Dev

MySQL-如何修改列默认值?

来自分类Dev

Grails 2.2.4:在MySQL 5.5中创建列默认值

来自分类Dev

MySQL-如何修改列的默认值?

来自分类Dev

从空表中选择列的默认值(mysql)

Related 相关文章

  1. 1

    为什么需要默认值呢?

  2. 2

    为什么nullglob不是默认值?

  3. 3

    列默认值中的MySQL函数

  4. 4

    为什么列的默认值不适用于Django

  5. 5

    为什么在实现中允许使用与在接口上定义的默认值不同的默认值?

  6. 6

    为什么RandomForestClassifier中的max_features的默认值与RandomForestRegressor中的默认值不同?

  7. 7

    Mysql2 :: Error:BLOB,TEXT,GEOMETRY或JSON列'body'不能具有默认值

  8. 8

    为什么在访问结构时需要默认值?

  9. 9

    Java:为什么未使用XX:SurvivorRatio的默认值?

  10. 10

    为什么要推动匹配Git中的默认值?

  11. 11

    为什么out参数没有默认值?

  12. 12

    使用:=时,为什么with = TRUE是默认值?

  13. 13

    为什么我的argparse不显示默认值?

  14. 14

    为什么我的DropDownListFor的默认值无法正常工作?

  15. 15

    为什么constexpr不是所有函数的默认值?

  16. 16

    为什么constexpr不能只是默认值?

  17. 17

    为什么FreezeGun不使用SQLAlchemy默认值?

  18. 18

    为什么Mockito verifyNoMoreInteractions的Scala默认值有问题

  19. 19

    为什么可选参数的默认值必须为常数?

  20. 20

    为什么打印屏幕采用默认值

  21. 21

    为什么`ffmpeg`的`-hide_banner`不是默认值?

  22. 22

    为什么需要“-人类可读”而不是默认值?

  23. 23

    express-locale始终返回默认值-为什么?

  24. 24

    为什么 <value>!0</value> 匹配默认值 0?

  25. 25

    为什么在注释中禁止 null 作为默认值?

  26. 26

    MySQL-如何修改列默认值?

  27. 27

    Grails 2.2.4:在MySQL 5.5中创建列默认值

  28. 28

    MySQL-如何修改列的默认值?

  29. 29

    从空表中选择列的默认值(mysql)

热门标签

归档