Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database DBMS如何比较主键?_Database - Fatal编程技术网

Database DBMS如何比较主键?

Database DBMS如何比较主键?,database,Database,我想在数据库级别保护我的数据。然后,我想到的解决方案是:有一个包含4列索引的复合主键,其中3个也是外键 姓名、身份证、纪律、姓名、步骤、年份 但我来自巴西,用我们的话说,我们有口音,所以我对要插入数据库的新数据和已经插入的数据之间的比较感到困惑。一个例子: 如果我在数据库级别插入'Mat'-'1'-'1st'-'2012',我的数据将受到保护,因为这些列是主键,那么我无法插入另一个相等的条目('Mat'-'1'-'1st'-'2012') 问题是,其中,name和name\u step可以有重音

我想在数据库级别保护我的数据。然后,我想到的解决方案是:有一个包含4列索引的复合主键,其中3个也是外键

姓名、身份证、纪律、姓名、步骤、年份

但我来自巴西,用我们的话说,我们有口音,所以我对要插入数据库的新数据和已经插入的数据之间的比较感到困惑。一个例子:

如果我在数据库级别插入
'Mat'-'1'-'1st'-'2012'
,我的数据将受到保护,因为这些列是主键,那么我无法插入另一个相等的条目<代码>('Mat'-'1'-'1st'-'2012')

问题是,其中,namename\u step可以有重音。DBMS将如何使用比较?我在口音和比较方面会有困难吗

我必须使用ISO-8859-1作为我的字符集并在没有
htmlentities()的情况下存储吗

提前谢谢

  • 第一:看起来你对术语有点困惑。每个表最多有一个主键(毕竟,“primary”就是从这里来的)。可能有更多的键或索引列(即那些外键-它们是其他表的键,但对于这个表,它们只是带有约束的索引字段)

  • 是否可以存储带重音符号的字符串取决于数据类型。对于存储国家字符串,使用NVARCHAR数据类型,非ascii字符的处理和存储方式取决于所使用的字符集——这随所使用的DBMS而异。与其他数据类型一样,NVARCHAR可以进行比较

  • 为了比较NVARCHAR字符串,排序规则将出现在场景中。这说明了如何说明哪些字符串比另一个字符串“小/大”。同样,细节因DBMS而异。在谈论索引时,排序规则并不重要(在这里,您只关心字符串是否相等),在排序时,排序规则变得很重要

  • 数字id作为主键是一种很好的做法。您可以为字符串数据建立索引以进行快速查询,同时,当您可以使用数字id指定记录时,数据操作更容易

编辑: 因此,对于问题和您的评论:

如果您确保按照DB的预期输入数据,则比较将起作用。这意味着,在代码中,数据必须位于为表/列定义的字符集中(如果未指定任何字符集,则为数据库的默认字符集)。通常,最简单的方法是使用
NVARCHAR
作为字段的数据类型,这些字段包含国家语言字符串,并在代码一侧输入unicode字符串


从技术上讲,可以使用VARCHAR来存储本地字符串,但更容易出错-您必须确保在任何地方都保留相同的字符集设置:表定义、数据库连接、代码。当您突然需要输入所选字符集中不包含的重音字符时,您可能很容易陷入死胡同,因此我强烈建议使用NVARCHAR和unicode。

情况是:我希望在数据库级别保护数据。然后,我想到的解决方案是:有一个包含4列索引的复合主键,其中3个也是外键。好啊如果我在数据库级别插入'Mat'-'1'-'1st'-'2012',我的数据将受到保护,因为这些列是主键,那么我无法插入另一个相等的条目。('Mat'-'1'-'1st'-'2012')。那么回到我的主要问题,在我的国家,我们有口音的话,DBMS将如何比较条目,以确保条目是唯一的?我在口音和比较方面会有困难吗?哦,我误解了。尽管如此,我还是建议为这些列设置一个数字id和唯一索引。使用这种私钥操纵记录往往很尴尬。剩下的-我会更新一点答案,但我(或其他人)只能更具体地说,如果你说你使用的是什么DB,表(包括字符集)的定义是什么,关于键,问题解决了,我使用一个主键和自动递增。我用了一些独特的钥匙。我将使用MySQL作为我的DBMS。