|
ошибка после изменения дефолтного collation у чарсета
|
|||
---|---|---|---|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
И даблклик на имени таблицы перестаёт работать. FB3. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2015, 01:09 |
|
ошибка после изменения дефолтного collation у чарсета
|
|||
---|---|---|---|
#18+
ССЗБ. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2015, 06:12 |
|
ошибка после изменения дефолтного collation у чарсета
|
|||
---|---|---|---|
#18+
IBExpertССЗБ. Толсто. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2015, 07:05 |
|
ошибка после изменения дефолтного collation у чарсета
|
|||
---|---|---|---|
#18+
И после Extract Metadata в скрипте только генераторы и исключения. В 2.5.5 тоже. Ваша программа работает некорректно, а вы почему-то в мой адрес применили аббревиатуру ССЗБ. Почему? Спрашиваю, потому что не готов поверить в то что такую программу способен написать хам или тролль. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2015, 12:38 |
|
ошибка после изменения дефолтного collation у чарсета
|
|||
---|---|---|---|
#18+
fb user, ты в isql проверял? В том числе экспорт в скрипт. Если там нет ошибок, то да ошибка в IBE. P.S. На хрена потребовалось включать чувствительность к завершающим пробелам? Тем более по дефолту для всех полей чарсета win1251. Я бы не назвал это ни хамством ни троллингом. Тебе ответили, что ты сам виноват только и всего. И таки да. Ты в курсе что это должно адекватно работать только для вновь создаваемых объектов метаданных? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2015, 14:20 |
|
ошибка после изменения дефолтного collation у чарсета
|
|||
---|---|---|---|
#18+
fb userВаша программа работает некорректно, а вы почему-то в мой адрес применили аббревиатуру ССЗБ. Почему? Потому что ты должен отдавать себе отчет в последствиях подобных изменений. Работать не будет не только эксперт, но и большинство другого прикладного софта, потому что многие, в том числе очень простые и прозрачные запросы, возвращают несколько неожиданный, я бы сказал, результат. Например Код: plsql 1. 2.
не вернет нифига. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2015, 14:55 |
|
ошибка после изменения дефолтного collation у чарсета
|
|||
---|---|---|---|
#18+
fb user, Если я правильно понял, то произошло следующее У rdb$relation_name чарсет UNICODE_FSS для которого ничего не меняли. Однако литерал 'RDB$FIELDS' теперь сравнивается с учётом пробелов. Тип поля rdb$relation_name CHAR(31). Он дополняется пробелами до декларированной длинны. В итоге мы ни хрена не находим. Ты думаешь нечувствительность к конечным пробелам по умолчанию от балды поставили? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2015, 15:16 |
|
ошибка после изменения дефолтного collation у чарсета
|
|||
---|---|---|---|
#18+
IBExpertПотому что ты должен отдавать себе отчет в последствиях подобных изменений. Работать не будет не только эксперт, но и большинство другого прикладного софта, потому что многие, в том числе очень простые и прозрачные запросы, возвращают несколько неожиданный, я бы сказал, результат. Например Код: plsql 1. 2.
не вернет нифига. Вот так понятно. А если написать Код: sql 1. 2.
то индекс по rdb$relation_name не подтягивается. Получается NO PAD если и юзабелен, то с граблями. Придётся всегда держать в уме что сравнение строк неточное, и прикладывать усилия если нужно сравнивать прям побайтно. Симонов Денис , это наверняка где-то в документации отражено, да? Я не про NO PAD, а про сравнения строк, что они сравниваются не абы как. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2015, 17:58 |
|
ошибка после изменения дефолтного collation у чарсета
|
|||
---|---|---|---|
#18+
fb user, читай CREATE COLLATION там это есть. Про косяки которые могут возникнуть с IBE и другими прогами там конечно не написано. Да и грубо говоря это не совсем косяк FB. PAD SPACE по умолчанию стоит потому что это по стандарту, ну и ИХМО так удобнее сравнивать CHAR с VARCHAR. Если где-то нужно другое поведение включаем такое поведение для этого филда. А включать сразу для всей кодировки опасно как оказалось. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2015, 18:47 |
|
ошибка после изменения дефолтного collation у чарсета
|
|||
---|---|---|---|
#18+
fb user, а ты про сравнение строк и то что там не учитываются завершающие пробелы? Надо посмотреть. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2015, 18:49 |
|
ошибка после изменения дефолтного collation у чарсета
|
|||
---|---|---|---|
#18+
Симонов ДенисТы думаешь нечувствительность к конечным пробелам по умолчанию от балды поставили? Возможно это было сделано чтобы закрыть несуразность с типом CHAR. Если у нас тип поля CHAR(10), и в это поле записать значение 'самосвал', то реально в поле оказывается 'самосвал '. Это, согласитесь, несколько обескураживает, если столкнулся с SQL впервые. Ну и, скорей всего, чтобы не писать where F = 'самосвал ' и было придумано пробелы отбрасывать (сначала приделываем пробелы при вставке, честно храним их, а потом отбрасываем при сравнении). Потом скорей всего поняли что с типом CHAR так каши не сварить, и придумали VARCHAR, но отбрасывание концевых пробелов при сравнении так и осталось. И поэтому если в VARCHAR(20) записать 'самосвал ', то там будет 'самосвал ', но находить его можно как по 'самосвал ', так и по 'самосвал'. Третье поколение строковых типов будет называться STRING, и будет работать очевидным для пользователей способом (так как сделала компания Борланд сначала для паскаля (короткие строки), а затем для Delphi (длинные строки с reference-count), но не успела так сделать для Interbase (или не захотела, или не смогла)). Пользователи стринги оценили. И если бы у стрингов в Delphi было сравнение с отбрасыванием пробелов (что бывает наверное только у sql-серверов), то это конечно было бы оценено как недоразумение. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2015, 18:53 |
|
ошибка после изменения дефолтного collation у чарсета
|
|||
---|---|---|---|
#18+
fb user, согласен про то, что сделано для сравнения CHAR без пробелов. В остальном нет. Не знаю когда там появились VARCHAR, но скажу так — и тот и другой тип нужен. Просто надо понимать что CHAR лучше использовать для строк фиксированной длины. Есть такие данные где число введённых символов приблизительно одинаковое. Например номер телефона. В таких случаях использование CHAR предпочтительней. А там где оно сильно может разниться лучше использовать VARCHAR (например ФИО). По какой причине в системных таблицах для объектов метаданных выбран тип CHAR я не знаю. Возможно это обусловлено историческими причинами, но теперь это так и вряд ли это будут переделывать. Опять про стринги разговоры пошли. NickDee признавайся это ты? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2015, 19:13 |
|
ошибка после изменения дефолтного collation у чарсета
|
|||
---|---|---|---|
#18+
Симонов ДенисНапример номер телефона. В таких случаях использование CHAR предпочтительней. В случае телефона +7(999)9999999, чем CHAR(14) лучше чем VARCHAR(14)? И туда и туда можно вписать любую последовательность символов длиной до 14, хоть даже и не телефон. Только для CHAR при вычитке строка дополнится пробелами до 14 символов. А в VARCHAR будет столько символов, сколько записали, без самодеятельности. CHAR единственно удобен тем, что паддить не нужно. Поля возвращаются с пробелами в конце. Но это нужно только тем, кому нужны пробелы в конце. Ещё для каждого CHAR-значения на клиенте приходится делать TrimRight, чтобы вычленить полезные данные, что ресурсозатратно. С варчарами такого не нужно, т.к. известна длина полезных данных. Если просто посмотреть что происходит с CHAR-значением за период его жизни, то получится что его постоянно паддят и триммят. Паддят при внесении в БД, триммят при сравнении и при извлечении полезных даных на клиенте. Варчары триммят только при сравнении, и нигде не паддят. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2015, 22:47 |
|
ошибка после изменения дефолтного collation у чарсета
|
|||
---|---|---|---|
#18+
fb user...что бывает наверное только у sql-серверов... Ты сильно ошибаешься. такое сравнение строк было задолго до sql ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2015, 06:04 |
|
ошибка после изменения дефолтного collation у чарсета
|
|||
---|---|---|---|
#18+
fb user, да CHAR для строк постоянной длины более удобен. Ты в курсе что VARCHAR требует два дополнительных байта для хранения длины? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2015, 06:56 |
|
ошибка после изменения дефолтного collation у чарсета
|
|||
---|---|---|---|
#18+
Симонов Денисfb user, да CHAR для строк постоянной длины более удобен. Ты в курсе что VARCHAR требует два дополнительных байта для хранения длины? Ну если только с этой точки зрения смотреть. Похоже системные таблицы Interbase были введены до появления типа VARCHAR. Кстати такая капуста в новых системных таблицах с этими типами: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
ФИО - это конечно шедевр :) Кому-то нужно почитать: про отчества . Я у себя сначала тоже имел FIO на три поля. Потом понял что хочу иметь просто длинный Name, чтобы туда можно было вписать удобный пользователю вариант (а не как удобно моим устаревшим шаблонам мышления): --------------------- Иванов Иван Иванович Иванов И.И. София Елена Беатриса Французская У́го Рафаэ́ль Ча́вес Фри́ас --------------------- А поле UserName переименовалось в Login. SEC$PLUGIN CHAR(31) CHARACTER SET UNICODE_FSS - 31 символ? Опять? И снова UNICODE_FSS? И во славу чьих-то шаблонов мышления там тот же CHAR. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2015, 10:39 |
|
ошибка после изменения дефолтного collation у чарсета
|
|||
---|---|---|---|
#18+
fb user, Не стоит забывать что для CHAR память выделяется один раз и сразу. Просто оставшаяся длина инициализируется пробелами. Оно во многих случаях дешевле. С VARCHAR удобней производить конкатенацию, т.к. не надо задумываться об обрезании пробелов. Про ФИО. Я вообще считаю что эти поля здесь не обязательны. Во-первых есть COMMENT для пользователей куда ты хоть целое сочинение можешь написать. Во-вторых есть пользовательские свойства (TAGS), куда можно до 255 символов текста вносить. В-третьих ты можешь создать свою таблицу и завязаться на имя логина и пихать туда что угодно в удобном для себя формате. Про поле PLUGIN ты судя по всему вообще ничего не понял. И почему оно должно иметь другую кодировку. Я уже говорил если менять кодировку метаданных, то у всего и сразу. Да UTF-8 был бы предпочтительней, но там без увеличения длины поля не обойтись, а это потянет за собой кучу других переделок. Да и придётся в ресторе снова делать -fix_metadata utf8. Жаль конечно что текст исключения обделили и оставили у него NONE. И вообще твои выпады какие-то не серьёзные. Не там ты видишь проблемы. Не там. Поверь большинству пользователей начхать на бесконечные строки и на названия объектов метаданных в национальной кодировке. Их волнуют прежде всего производительность, безопасность, надёжность и языковые возможности. Можно для интереса тему замутить "Что вы хотите видеть в Firebird 4?". Как-то была тут подобная много лет назад. Сразу будет видно приоритет твоих хотелок и что реально хочется большинству. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2015, 11:09 |
|
|
start [/forum/topic.php?fid=42&msg=39031064&tid=1599473]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
25ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 120ms |
0 / 0 |