Mysql 哪一个更好:在NVARCHAR或VARCHAR中存储包含Unicode字符的字符串?
我想存储包含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代码时)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有一些进步。更
*2) 要知道每个数据库都有稍微不同的数据类型,而VARCHAR并不意味着每个数据库都是相同的。虽然MSSQL有VARCHAR和NVARCHAR,但Apache/Derby数据库只有VARCHAR,而VARCHAR是Unicode格式的。AFAIK,NVARCHAR仅在您使用不同的collate并需要对这些信息进行排序时才会帮助您。