我正在使用Python(Django)开发一个Web应用程序,并且想知道在部署生产时MySQL或PostgreSQL是否更适合.
在一个播客中, Joel说他在使用MySQL方面存在一些问题并且数据不一致.
我想知道是否有人有这样的问题.还有可以轻松调整的性能?
在MySQL中,我有一个表,其中Column1为NOT NULL:
create table myTable
(
Column1 int not null,
Column2 int not null
)
Run Code Online (Sandbox Code Playgroud)
我仍然可以像这样插入一个空值:
INSERT INTO `myTable` ( `Column1` , `Column2` )
VALUES ( '66', '' );
Run Code Online (Sandbox Code Playgroud)
如何让MySQL列也禁止blankstring?
为什么第一个INSERT会通过table2.请注意,table2.col_1是非NULL.它不会为col_1插入NULL,但会神秘地将NULL值转换为空字符串.我正在使用MySQL版本5.5.28.谢谢
mysql> DROP TABLE IF EXISTS table1, table2;
Query OK, 0 rows affected (0.01 sec)
mysql> CREATE TABLE IF NOT EXISTS table1 (
-> id INT UNSIGNED NOT NULL AUTO_INCREMENT ,
-> col_1 VARCHAR(45) NOT NULL ,
-> col_2 VARCHAR(45) NOT NULL ,
-> PRIMARY KEY (`id`))
-> ENGINE = InnoDB;
Query OK, 0 rows affected (0.01 sec)
mysql> CREATE TABLE table2 LIKE table1;
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO table1 (id, col_1, col_2) VALUES (NULL, …Run Code Online (Sandbox Code Playgroud) 我刚刚发现NOT NULL不需要字段.
创建mysql表时,如何创建一个不能包含null或空白的字段(必须包含某些内容)?
我正在使用PHPMyAdmin,我尝试将NOT NULL约束添加到我的表的列中.
PHPMyAdmin接受以下查询:
ALTER TABLE `wall` MODIFY `token_message` varchar(40) NOT NULL;
Run Code Online (Sandbox Code Playgroud)
但我仍然可以插入空字符串(= NULL),我不明白为什么.
PS:如果你要给我一些其他的查询来添加这个约束,请注意我已经尝试过这些在我的PHPMyAdmin中无效的3(错误类型:#1064 - 你的SQL语法有错误;查看手册):
ALTER TABLE `wall` ALTER COLUMN `token_message` SET NOT NULL;
ALTER TABLE `wall` ALTER COLUMN `token_message` varchar(40) NOT NULL;
ALTER TABLE `wall` MODIFY `token_message` CONSTRAINTS token_message_not_null NOT NULL;
Run Code Online (Sandbox Code Playgroud) 所以我有一个具有以下属性的书模型:
title = models.CharField(max_length=250)
Run Code Online (Sandbox Code Playgroud)
在管理员或模型表单中,这将不允许保存空字符串,因为默认情况下为blank = False.但在我的情况下,我正在解析xml并以这种方式创建模型,所以我根本不使用任何形式.
所以我想知道我可以设置一个不允许空字符串的约束,还是我必须编写我的模型字段或调整我的解析器?
我已将每列设置为NOT NULL但由于某种原因,我仍然可以NULL在每列中添加值.这是我的表信息(创建语法):
CREATE TABLE `addresses` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`address` varchar(100) NOT NULL,
`city` varchar(100) NOT NULL,
`state` varchar(4) NOT NULL,
`zip` varchar(30) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4545 DEFAULT CHARSET=utf8;
Run Code Online (Sandbox Code Playgroud)
这是一个有效的示例INSERT:
INSERT INTO `addresses` (`street`, `city`, `state`, `zip`) VALUES ('', '', '', '');
Run Code Online (Sandbox Code Playgroud)
关于为什么会发生这种情况的任何想法?