English 中文(简体)
为什么在MySQL中一栏有违约价值?
原标题:Why can t a text column have a default value in MySQL?

如果你试图在一张桌子上打下一个信标栏,并在MySQL中给它一个缺省值,那么你就有一个错误(至少是视窗)。 我看不出为什么案文一栏不应有违约价值。 MySQL文件没有解释。 对我来说,这似乎不合逻辑(而且有些令人沮丧,因为我想的是违约值!) 任何人都知道为什么不允许这样做?

最佳回答

Windows MySQL v5投掷了一个错误,但六氯环己烷和其他版本仅提出警告。 这一点需要确定。 WTF?

在MySQL Bug履带,也看到试图将此定为第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:

我本人确实认为这是ug。 搜索“BLOB/TEXT一栏可能有违约值”,在谷歌上回收了大约2 940项成果。 多数报告都指出,在试图安装一个系统而不是其他系统的非银文字时,缺乏一致性。

我现在从网上申请Im更改我的客户之一,最初部署在Lino MySQL诉5.0.83-log。 I m 运行Windows MySQL v5.1.41。 即使试图利用最新版本的phpMyAdmin来提取数据库,它也没有报告有关案文栏的违约情况。 然而,当我尝试在Windows上安装一个插头(在含水层的部署方面进行罚款)时,我在ABC一栏上没有出现任何违约错误。 我试图以明显的缺省(以该一列独特的价值选择为基础)在当地重新编制表格,最后收到“可使用”的BLOB/TEXT一栏可能没有违约值>。

同样,不维持整个平台的基本可归性是令人无法接受的,也是ug。


www.un.org/Depts/DGACM/index_spanish.htm • 如何在MySQL 5(Windows):中消除严格的模式

  • Edit /my.ini and look for line

    sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
    
  • 改为

    sql_mode= MYSQL40 
    
  • 恢复MySQL服务(假设这是我的ql5)

    net stop mysql5
    net start mysql5
    

如果你有根基/行政通道,你就能够执行。

mysql_query("SET @@global.sql_mode= MYSQL40 ");
问题回答

主要问题:

任何人都知道为什么不允许这样做?

至今仍未回答,我进行了快速搜查,发现MySQL开发商在MySQL Bugs上增加了一个相对较新的补充:

[17 Mar2017 15:11] Ståle Deraas

由开发商担任:

这确实是一个有效的特征要求,从一看,增加似乎微不足道。 但是,TEXT/BLOBS值并不直接储存在用于阅读/更新表格的记录缓冲中。 因此,为它们分配违约值更为复杂。

这并不是明确的答复,但至少是why问题的起点。

在时间上,我只贴在上面的代码,或者使该栏失去效力,或者明确地为每个<代码>(<<>代码>)分配一个(fault>>。 A. 适用准则......

"Support for DEFAULT in TEXT/BLOB columns" is a feature request in the MySQL Bugtracker (Bug #21532).

I see I m not the only one who would like to put a default value in a TEXT column. I think this feature should be supported in a later version of MySQL.

This can t be fixed in the version 5.0 of MySQL, because apparently it would cause incompatibility and dataloss if anyone tried to transfer a database back and forth between the (current) databases that don t support that feature and any databases that did support that feature.

通过使用触发器,你可以发挥与违约值相同的作用。

create table my_text

(
   abc text
);

delimiter //
create trigger mytext_trigger before insert on my_text
for each row
begin
   if (NEW.abc is null ) then
      set NEW.abc =  default text ;
   end if;
end
//
delimiter ;

MySQL 8.0.13, 发布2018-10-22, 和TEXT/code>、JSON/code>、/code/code>。

您不能写:

create table foo(bar text default  baz )

但现在可以写:

create table foo(bar text default ( baz ))

实现同样目标。

我通常操作的是短链氯化石蜡,但我还在当地的Windows机器上开发。 我曾多次处理这个问题,在我遇到问题时,仅仅确定表格。 我昨天安装了一台助手,帮助人们走出来,当然再次陷入了这一问题。 因此,我决定,现在应当说明正在发生的情况,并找到了这一read。 我真的不喜欢把服务器的舱位改为较早的方式(缺席),因此,我提出了简单(思想)的解决办法。

这一解决办法当然要求开发商填写表格制作稿,以补偿光盘上的MySQL问题。 你在倾销档案中看到类似的概念。 基督教青年会的一个告诫是,如果使用分治办法,这可能会/将会造成问题。

// Store the current sql_mode
mysql_query("set @orig_mode = @@global.sql_mode");

// Set sql_mode to one that won t trigger errors...
mysql_query( set @@global.sql_mode = "MYSQL40" );

/**
 * Do table creations here...
 */

// Change it back to original sql_mode
mysql_query( set @@global.sql_mode = @orig_mode );

这一点令人不安。

乌班图16.04:

• 如何在MySQL 5.7中消除严格限制:

Edit file /etc/mysql/mysql.conf.d/mysqld.cnf

如果在我sql.cnf下线存在,

sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

然后改为

sql_mode= MYSQL40 

不适用

我sqld.cnf

sql_mode= MYSQL40 

这个问题已经解决。

www.un.org/Depts/DGACM/index_spanish.htm 这是一个非常老的问题,但似乎没有得到适当的回答。 而且,我的这一回答只是对问题的实际回答——“WHY能够开立一栏,具有缺省价值”,但是由于不可能撰写长篇评论,而且我的意见有助于某人防止错误,这里是一个单独的答案:。

有些人说,这一错误之所以发生,是因为SOS——Windows-HCH;但这一斜线与SOS直接有关。 (然而,我不肯定的是,MySQL在不同安装装置中,在不同专业单位的缺席环境中可能会有差异。)

主要原因为:为<代码>sql_mode设定的旗帜GMICT_TRANS_TABLES。 如果数值未在<代码>中指明, INSERT statement for EXT datatype栏, and if the sign now in the sql_mode 当时,MySQL正在报道一个错误;如果国旗确实存在,那么MySQL只是报警,并插入记录。

因此,为了防止这一错误,可以删除<代码>。 STRICT_TRANS_TABLES from sql_mode/code> establishing of MySQL. (如果该模式可能影响数据库的其他业务,我需要重新确定该模式,使其达到以前的价值。)

根据,MySQL ......

关于<代码>STRICT_TRANS_TABLES, MySQL将一个无效值改为该栏中最接近有效值,并插入调整值。 如果价值缺失,MySQL插入一栏数据类型的默认值。 在这两种情况下,MySQL都会产生警告而不是错误,并继续处理这一说法。 第11.6节“Data型违约值”描述了默示违约情况。

......和,数据类型Default Values

<代码>BLOB,TEXT,GEOMETRYJSON/code> 不能指定数据类型为违约值。

...... 。 一栏无缺值,但<代码> STRICT_TRANS_TABLES sql_mode上删除。 然后,MySQL在<代码>没有指明任何价值的情况下插入空座。 页: 1





相关问题
SQL SubQuery getting particular column

I noticed that there were some threads with similar questions, and I did look through them but did not really get a convincing answer. Here s my question: The subquery below returns a Table with 3 ...

please can anyone check this while loop and if condition

<?php $con=mysql_connect("localhost","mts","mts"); if(!con) { die( unable to connect . mysql_error()); } mysql_select_db("mts",$con); /* date_default_timezone_set ("Asia/Calcutta"); $date = ...

php return a specific row from query

Is it possible in php to return a specific row of data from a mysql query? None of the fetch statements that I ve found return a 2 dimensional array to access specific rows. I want to be able to ...

Character Encodings in PHP and MySQL

Our website was developed with a meta tag set to... <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> This works fine for M-dashes and special quotes, etc. However, I ...

Pagination Strategies for Complex (slow) Datasets

What are some of the strategies being used for pagination of data sets that involve complex queries? count(*) takes ~1.5 sec so we don t want to hit the DB for every page view. Currently there are ~...

Averaging a total in mySQL

My table looks like person_id | car_id | miles ------------------------------ 1 | 1 | 100 1 | 2 | 200 2 | 3 | 1000 2 | 4 | 500 I need to ...

热门标签