Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.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
Mysql 哪一个更好:在NVARCHAR或VARCHAR中存储包含Unicode字符的字符串?_Mysql_Sql_Database_Database Design_Informix - Fatal编程技术网

Mysql 哪一个更好:在NVARCHAR或VARCHAR中存储包含Unicode字符的字符串?

Mysql 哪一个更好:在NVARCHAR或VARCHAR中存储包含Unicode字符的字符串?,mysql,sql,database,database-design,informix,Mysql,Sql,Database,Database Design,Informix,我想存储包含Unicode字符的字符串 我知道有两种选择。NVARCHAR和VARCHAR。NVARCHAR使用2个字节来存储字符;但是,VARCHAR使用1字节作为字符 就存储2个2字节unicode字符而言,每个字符使用4个字节。但在存储1个1字节的ansi字符和1个2字节的unicode字符时,NVARCHAR使用4个字节,VARCHAR使用3个字节 所以我认为使用VARCHAR更紧凑,而且总是更好的方法。我不知道我上面的理解是否正确,因为NVARCHAR应该比VARCHAR有一些进步。更

我想存储包含Unicode字符的字符串

我知道有两种选择。NVARCHAR和VARCHAR。NVARCHAR使用2个字节来存储字符;但是,VARCHAR使用1字节作为字符

就存储2个2字节unicode字符而言,每个字符使用4个字节。但在存储1个1字节的ansi字符和1个2字节的unicode字符时,NVARCHAR使用4个字节,VARCHAR使用3个字节

所以我认为使用VARCHAR更紧凑,而且总是更好的方法。我不知道我上面的理解是否正确,因为NVARCHAR应该比VARCHAR有一些进步。

更小=>更快。 但是要注意索引和您呈现给它的数据类型*1。 还要注意不同类型的数据库服务器中的不同数据类型*2

*1) 在MSSQL中: 当您在VARCHAR列上有一个索引并将其显示为Unicode字符串时,MSSQL Server不会使用该索引。当您向包含SmallInt的索引列提供BigInt时,也会发生同样的情况。即使BigInt小到可以成为SmallInt,SQL Server也无法使用索引。 另一方面,您没有这个问题(当为索引的BigInt-ot-NVARCHAR列提供SmallInt或Ansi代码时)


*2) 要知道每个数据库都有稍微不同的数据类型,而VARCHAR并不意味着每个数据库都是相同的。虽然MSSQL有VARCHAR和NVARCHAR,但Apache/Derby数据库只有VARCHAR,而VARCHAR是Unicode格式的。

AFAIK,NVARCHAR仅在您使用不同的collate并需要对这些信息进行排序时才会帮助您。