究竟什么是"尾随空间"在MySQL?

时间:2017-08-27 16:55:46

标签: mysql special-characters

我正在开发一个项目,我必须确保我不会在MySQL 5.5数据库后端存储字符串,这些字符串包含MySQL文档调用的内容和#34;尾随空格" (这主要归功于oddities with char and varchar fields, unique indexes and comparisons)。

这基本上意味着应用程序必须删除"尾随空格"在将它们存储在数据库中之前从所有字符串中虽然这在第一眼看上去很容易,但我问自己在这种情况下究竟是什么(尾随)空格。

当然,ASCII 0x20是一个空格。但是还有许多其他(unicode)字符通常被认为是空格(至少在MySQL世界之外)。例子是U + 00A0(非中断空间)和U + 200B(零宽度空间),以此命名其中两个;我很确定其中至少还有十几个。

我非常强烈地假设上面提到的上下文中的MySQL只考虑通常的空格字符(ASCII 0x20)作为空格,但我想知道肯定。我还没有在MySQL文档或其他地方看到有关此问题的提示,所以我在这里问。

1 个答案:

答案 0 :(得分:0)

为了回答我自己的问题,SQL:2006,第2部分的最终草案以及后来的SQL版本的后期(非最终)工作草案都包含了一个类似的段落来处理该主题。

从第一章开始(第4.2.1章,字符串简介,强调我的):

  

字符集分为三类:国家定义的字符集   或国际标准,由SQL实现定义的那些,以及   应用程序定义的那些。由...定义的字符集   [ISO10646]和[Unicode]称为通用字符集(UCS)   他们的处理在第4.2.8节“通用   字符集“。 每个字符集都包含< space>字符   (相当于U + 0020)。应用程序定义一个字符集   从前两个中的一个为字符集分配新名称   类别。可以将它们定义为“驻留”在所选择的任何模式中   应用程序。由标准或由。定义的字符集   SQL实现驻留在信息模式中(命名为   每个目录中的INFORMATION_SCHEMA),以及定义的排序规则   标准和校对,音译和转码定义   通过SQLimplementations。

恕我直言,毫无疑问,ASCII 0x20是唯一的事物,SQL标准(因此MySQL)认为< space>,特别是考虑到标准和MySQL时文档写出如图所示的字符,即包括尖括号。