我想区分字符c
和č
或e
和é
。
是否可以使用Propel处理mysql的二进制字符串?或者我可以在没有Propel的情况下直接在我的MySQL数据库中处理它(仅针对一个表,其他一些表仍然会对它进行相同处理)。但是,查询仍将使用Propel执行(在查询中是否支持Pro BINARY
。)。
Propel VARBINARY
仅映射到 MySQL BLOB
(与 Propel {{1}相同}和 Propel的 BLOB
和VARBINARY
似乎很复杂(它们返回资源ID)。
所以我尝试了 Propel BLOB
,它映射到 MySQL CLOB
。这在使用中效果很好,但是LONGTEXT
和e
再次相同。所以它与我目前的é
没有区别。
目前我使用长度为50的VARCHAR。
答案 0 :(得分:1)
关于整理的一般信息
使用MySQL排序规则,您可以指定应如何比较存储在列中的不同字符。要更好地了解每个排序规则如何处理字符,您可以查看collation-charts.org。
二进制排序规则会以不同方式处理每个字符,因此e
和é
等字符不相同。
要更好地了解排序规则的工作原理,您还可以查看Turkish UTF-8 collation of MySQL。在那里,您会看到ğ
和g
土耳其语中的单独字符被视为不同的字符,而其他字符则视为相同。
排序不仅指定哪些字符相同,而且还指定在排序列后排序的顺序。
在这种情况下,您的选择将是utf8_bin
。
在Propel中使用归类
要在Propel中设置所有内容,您可以在schema.xml中使用<vendor>
标记:
<column name="tag" phpName="Tag" type="VARCHAR" size="50" required="true">
<vendor type="mysql">
<parameter name="Collate" value="utf8_bin"/>
</vendor>
</column>