Propel и бинарные строки в MySQL

Я хочу различать символы 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.


person aufziehvogel    schedule 04.03.2012    source источник
comment
dev.mysql.com/doc/refman/5.0/en/ charset-database.html   -  person Dagg Nabbit    schedule 04.03.2012
comment
хех... Я могу сделать это ответом, если хочешь. Это, вероятно, тоже что-то обман, я уверен   -  person Dagg Nabbit    schedule 04.03.2012
comment
Не стесняйтесь публиковать ответ, я уже пытался собрать то, что смог увидеть до сих пор. Надеюсь, это не полная ерунда ;)   -  person aufziehvogel    schedule 04.03.2012
comment
Это выглядит лучше, чем то, что я собирался написать. Отметьте это правильно ;) (за исключением того, что я думаю, что вы можете быть немного смущены двоичным кодом. Старайтесь не хранить двоичные объекты в своей БД, если вы можете этого избежать. utf8 должен быть в порядке, я не уверен, что такое utf8_bin.)   -  person Dagg Nabbit    schedule 04.03.2012


Ответы (1)


Общие сведения о сортировке

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

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

Чтобы лучше понять, как работают сопоставления, вы также можете взглянуть на турецкий UTF-8. сопоставление MySQL. Там вы увидите, что ğ и 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>
person aufziehvogel    schedule 04.03.2012