如果你试图在一个表上创建一个文本列,并在MySQL中给它一个默认值,你会得到一个错误(至少在Windows上是这样).我看不出为什么文本列不应该有默认值.MySQL文档没有给出任何解释.这对我来说似乎不合逻辑(而且有点令人沮丧,因为我想要一个默认值!).有人知道为什么这是不允许的吗?

推荐答案

Windows MySQL v5抛出错误,但Linux和其他版本仅发出警告.这需要解决.WTF?

还可以在MySQL Bugtracker中看到一个将此修复为bug#19498的try :

布莱斯·内斯比特2008年4月4日下午4:36:

就我个人而言,我确实认为这是一个错误.在谷歌上搜索"BLOB/TEXT column不能有默认值"会返回大约2940个结果.其中大多数都是在try 安装在一个系统上工作但在其他系统上不工作的DB脚本时出现不兼容的报告.

我现在在为我的一个客户机修改的Web应用程序上遇到了同样的问题,该应用程序最初部署在Linux MySQL v5上.0.83-log.我正在运行Windows MySQL v5.1.41. 即使try 使用最新版本的phpMyAdmin来提取数据库,它也不会报告相关文本列的默认值.然而,当我try 在Windows上运行insert(在Linux部署上可以正常工作)时,我在ABC列上收到一个没有默认值的错误.我try 用明显的默认值(基于该列的唯一值的 Select )在本地重新创建表,最终收到非常有用的BLOB/TEXT column can't have a default value.

同样,不保持跨平台的基本兼容性是不可接受的,也是一个缺陷.


How to disable strict mode in MySQL 5 (Windows):

  • 编辑/我的.然后找线

    sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
    
  • 换成

    sql_mode='MYSQL40'
    
  • 重新启动MySQL服务(假设它是mysql5)

    net stop mysql5
    net start mysql5
    

如果你有根/管理员权限,你可能可以执行

mysql_query("SET @@global.sql_mode='MYSQL40'");

Mysql相关问答推荐

在Join的ON分句中使用SUM()

如何让Docker MySQL使用Unicode(utf-8)和初始化脚本?

左联接重复问题

SQL-从一个字段中 Select 值,但另一个字段中不包含零值

MySQL添加表会将&@@&qot;追加到表名

S在我的SQL代码中的外键出了什么问题?

在带有 D.I 的 .NET AWS Lambda 中使用 MySql.Data

模拟Mysql Cursor类的fetchone()方法,并将其返回值设置为None

如何解码存储在带有type*:前缀的base64中的数据?

仅当 SELECT 语句在 MySQL 中给出空集时才执行 UPDATE 语句

当mysql中只有一个索引列时,为什么使用范围条件锁定读取会锁定每条记录?

如何计算每行的剩余金额?

组平SQL查询结果

mysql 执行注释部分

MySQL查询根据同一表中其他字段的值更新表中的字段

如何通过 mysql workbench 将数据导入 mysql 数据库?

何时在 mysql 中使用 TEXT 而不是 VARCHAR

ON UPDATE RESTRICT 有什么作用?

mysql错误'TYPE = MyISAM'

将 UTF8 表上的 latin1 字符转换为 UTF8