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