Vac*_*ano 10 sql unicode varchar character-encoding
法语和西班牙语中有特殊字符,不能用于普通英语(重音元音等).
varchar中是否支持这些字符?或者我需要nvarchar吗?
(注:我不希望在我是否应该使用为nvarchar或varchar的讨论.)
Nic*_*rey 12
你在谈论什么SQL实现?
我可以谈谈Microsoft Sql Server; 其他SQL实现,而不是其他.
对于Microsoft SQL Server,默认排序规则为SQL_Latin1_General_CP1_CI_AS
(Latin 1 General,case-preserve,case-insensitive,accent-sensitive).它允许以单字节形式(varchar)而不是双字节形式(nvarchar)的大多数西欧语言的往返表示.
它建立在"Windows 1252"代码页上.该代码页实际上是ISO-8859-1,代码点范围0x80-0x9F由一组备用字形表示,包括0x80处的欧元符号.ISO-8859-1指定代码点范围作为控制字符,没有图形表示.
ISO-8859-1由Unicodes Basic Multilinigual Plane的前256个字符组成,覆盖8位字符(0x00-0xFF)的整个域.有关详情和比较,请参阅
对于这种整理顺序很难的西欧语言包括(但不一定限于)拉脱维亚语,立陶宛语,Polich语,捷克语和斯洛伐克语.如果您需要支持这些,您将需要使用不同的排序规则(SQL Server提供了大量的排序规则),或者转而使用nvarchar.
应该注意,在数据库中混合排序往往会导致问题.偏离默认排序规则应该只在必要时进行,并了解如何用脚射击自己.
我怀疑Oracle和DB2提供了类似的支持.我不知道MySQL或其他实现.
你必须使用nvarchar.
http://theniceweb.com/archives/156
大多数字符都适合varchar但有些不适合,为什么要承担风险.
相关问题
什么时候必须在SQL Server中使用NVARCHAR/NCHAR而不是VARCHAR/CHAR?
可以在varchar字段中存储的字符完全取决于为该特定字段定义的代码页。如果要存储某些特定字符,则可以选择一个代码页来存储这些字符,并且该代码页应该可以工作。不好
我的建议是始终使用nvarchar将字符串存储在SQL数据库中。实际上,无论是在数据库中还是在其他任何地方,我都认为非Unicode字符编码是一个错误。
您的操作系统在内部使用Unicode(无论是Windows,Mac,Linux还是其他)。JVM和.NET Framework在内部使用Unicode。每次查询数据库时,根本没有必要进行代码页转换。每次写入数据库时都没有必要进行代码页转换。只需使用nvarchar列,您的字符串就可以从应用程序直接到达数据库,而不会受到任何影响-无需字符转换查找,无需回退编码错误处理程序,也不需要怪异的字符或意外的问号。
通过对数据库中的所有字符串数据使用nvarchar以及在世界各地通常使用Unicode,您可以立即停止使用编码,而将注意力一直集中在应用程序的核心功能上。
今天是放弃传统字符编码的日子。
为追随您的维护人员执行此操作。为您的孩子做。自己动手做。