法语和西班牙语的特殊字符可以保存在varchar中吗?

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或其他实现.

  • 我想你今天早上需要解雇更多的caffiene.请在其他地方进行编辑. (5认同)
  • 那么也许你应该真的**读**写的句子:*它建立在"Windows 1252"代码页,**是ISO-8859-1,代码点范围0x80-0x9F ...替换为替代字形**.*这是一个真实的陈述.这是ISO-8859-1和Windows 1252之间的差异. (2认同)
  • 这就是"吃笋和叶子"的问题:错误的逗号改变了句子的意义.通过将逗号放在*with*前面,您将其更改为不是.这就像"我会问我的朋友,谁刚刚吃了brocolli"和"我会问我的朋友[那个]吃brocolli"之间的区别.如果它是"它建立在Windows-1252之上,它就像ISO-8859-1,除了代码点范围......"它会更加清晰.请注意,"代码页"对于我们许多人来说是一个外国术语,当然不会添加信息,因此应省略. (2认同)

msa*_*het 5

你必须使用nvarchar.

http://theniceweb.com/archives/156

大多数字符都适合varchar但有些不适合,为什么要承担风险.

相关问题

什么时候必须在SQL Server中使用NVARCHAR/NCHAR而不是VARCHAR/CHAR?


Jef*_*dge 5

可以在varchar字段中存储的字符完全取决于为该特定字段定义的代码页。如果要存储某些特定字符,则可以选择一个代码页来存储这些字符,并且该代码页应该可以工作。不好

我的建议是始终使用nvarchar将字符串存储在SQL数据库中。实际上,无论是在数据库中还是在其他任何地方,我都认为非Unicode字符编码是一个错误。

您的操作系统在内部使用Unicode(无论是Windows,Mac,Linux还是其他)。JVM和.NET Framework在内部使用Unicode。每次查询数据库时,根本没有必要进行代码页转换。每次写入数据库时​​都没有必要进行代码页转换。只需使用nvarchar列,您的字符串就可以从应用程序直接到达数据库,而不会受到任何影响-无需字符转换查找,无需回退编码错误处理程序,也不需要怪异的字符或意外的问号。

通过对数据库中的所有字符串数据使用nvarchar以及在世界各地通常使用Unicode,您可以立即停止使用编码,而将注意力一直集中在应用程序的核心功能上。

今天是放弃传统字符编码的日子。

为追随您的维护人员执行此操作。为您的孩子做。自己动手做。

  • @Vaccano-考虑到这一点:您可以将数据正确存储在系统中,并在与其他(旧版)系统通信时应用过滤器。然后,当另一个系统最终升级时,您的系统和所有数据将准备就绪。毕竟,您的应用程序(如果是使用任何现代平台构建的,则内部使用Unicode)与您的数据的通信点比外部系统多得多。而且,仅出于事物的原理,人们的名字应正确拼写! (2认同)