Propel и двоичные строки в MySQL - PullRequest
0 голосов
/ 04 марта 2012

Я хочу различаться между символами c и č или e и é.

Можно ли обрабатывать двоичные строки для mysql с Propel?Или я могу обработать это без Propel непосредственно в моей MySQL-базе данных (только для одной таблицы, некоторые другие таблицы все еще будут обрабатывать это все же).Однако запросы по-прежнему будут выполняться с помощью Propel (поддерживает ли Propel BINARY в запросах?).

Propel VARBINARY отображается только на MySQL BLOB(что совпадает с Propel BLOB) и Propel VARBINARY и BLOB, кажется довольно сложным в использовании (они возвращают идентификатор ресурса).

Итак, я попробовал Propel CLOB, который отображается на MySQL LONGTEXT.Это хорошо работает при использовании, но опять же e и é одинаковы.Так что он не отличается от моего текущего VARCHAR.

В настоящее время я использую VARCHAR длиной 50.

1 Ответ

1 голос
/ 04 марта 2012

Общие сведения о сопоставлении

Используя сортировку MySQL, вы можете указать, как должны сравниваться разные символы, хранящиеся в столбце. Чтобы получить более полное представление о том, как каждое сопоставление обрабатывает символы, вы можете посмотреть на collation-charts.org .

Бинарные сопоставления будут обрабатывать каждый символ по-разному, поэтому такие символы, как e и é, не являются одинаковыми.

Чтобы лучше понять, как сортировки работают, вы также можете взглянуть на турецкую сортировку MySQL UTF-8. Там вы увидите, что ğ и g, которые являются отдельными символами на турецком языке, рассматриваются как разные, тогда как другие считаются одинаковыми.

Параметры сортировки не только указывают, какие символы совпадают, но и в каком порядке они сортируются при сортировке после столбца.

Ваш выбор в этом случае будет utf8_bin.

Использование параметров сортировки в Propel

Чтобы настроить весь материал в Propel, вы можете использовать тег <vendor> в вашем schema.xml:

<column name="tag" phpName="Tag" type="VARCHAR" size="50" required="true">
  <vendor type="mysql">
    <parameter name="Collate" value="utf8_bin"/>
  </vendor>
</column>
...