gpt4 book ai didi

mysql - 为什么文本列在 MySQL 中不能有默认值?

转载 作者:行者123 更新时间:2023-11-29 03:22:48 25 4
gpt4 key购买 nike

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

最佳答案

Windows MySQL v5 会抛出错误,但 Linux 和其他版本只会发出警告。这需要修复。 WTF?

另请参阅 MySQL Bugtracker 中的错误 #19498 修复此问题的尝试:

Bryce Nesbitt on April 4 2008 4:36pm:
On MS Windows the "no DEFAULT" rule is an error, while on other platforms it is often a warning. While not a bug, it's possible to get trapped by this if you write code on a lenient platform, and later run it on a strict platform:

就我个人而言,我认为这是一个错误。在 Google 上搜索“BLOB/TEXT 列不能有默认值”会返回大约 2,940 个结果。其中大部分是在尝试安装在一个系统上运行但在其他系统上运行的数据库脚本时出现不兼容的报告。

我现在在为我的一个客户修改的 Web 应用程序上遇到了同样的问题,该应用程序最初部署在 Linux MySQL v5.0.83-log 上。我正在运行 Windows MySQL v5.1.41。即使尝试使用最新版本的 phpMyAdmin 来提取数据库,它也不会报告相关文本列的默认值。然而,当我尝试在 Windows 上运行插入(在 Linux 部署上运行良好)时,我收到了 ABC 列没有默认值的错误。我尝试使用明显的默认值(基于为该列选择的唯一值)在本地重新创建表并最终收到非常有用的 BLOB/TEXT 列不能有默认值.

同样,不保持跨平台的基本兼容性是 Not Acceptable ,并且是一个错误。


如何在 MySQL 5 (Windows) 中禁用严格模式:

  • 编辑/my.ini 并查找行

    sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
  • 替换为

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

    net stop mysql5
    net start mysql5

如果您有 root/admin 访问权限,您也许可以执行

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

关于mysql - 为什么文本列在 MySQL 中不能有默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41180058/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com