Ответ
Misha v.3 20.04.2007 12:29
хм, при LEFT ошибки быть не должно, т.к. согласно MySQL документации там работа идет с символами.
ошибка выскакивает не всегда
конечно. в случае, если "разрез" попадает на правильную границу буквы ошибки не будет.
например если вы делаете .left(...) у текста, содержащего только английские буквы.
или если вы делаете например .left(4) в то время, как у вас в начате текста только русские буквы. русские буквы в utf8 == 2 байта на букву, разрез придется на границу букв после второй.
Еще я не понял кто прав
я считаю что прав я :)
то, в какой кодировке буквы лежат в БД, для работы парсерного метода .left() совершенно не важно. вы их получили в UTF-8. некоторые методы работы со строками пока работать с UTF-8 не умеют. точка.
соотв. для вас главный вопрос: как это обойти. я предлагаю сделать это средствами MySQL. однако это может быть неприемлемо например с MySQL 3, т.к. он тоже в left()имел в виду байты, а не символы, т.е. работать не умел. расскажите что у вас за версия MySQL (show variables, и кроме версии покажите все опции с "charset" в их названии) - будем думать дальше.