|
Изменение CHARACTER SET поля
|
|||
---|---|---|---|
#18+
Есть таблица: Код: sql 1.
Требуется изменить чарсет поля B. Следующий оператор отрабатывает, но чарсет не меняет: Код: sql 1.
Но изменение соответствующего системного домена работает: Код: sql 1.
Проверено в 2.5 и 3. Собственно, вопрос: так и задумано или задумано не так? ИМХО, чарсет должен меняться и первым способом. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2015, 09:31 |
|
Изменение CHARACTER SET поля
|
|||
---|---|---|---|
#18+
IBExpert, у меня есть большие сомнения в том, что любой чарсет можно поменять на любой другой без огребания проблем. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2015, 09:36 |
|
Изменение CHARACTER SET поля
|
|||
---|---|---|---|
#18+
Симонов Денису меня есть большие сомнения в том, что любой чарсет можно поменять на любой другой без огребания проблем. Через изменение типа домена-то оно работает, без шума и пыли. Значит, должно работать и через изменение типа поля. Либо грязно ругаться в обоих случаях. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2015, 09:40 |
|
Изменение CHARACTER SET поля
|
|||
---|---|---|---|
#18+
IBExpert, Код: sql 1. 2. 3. 4. 5. 6. 7.
делаем Код: sql 1.
всё нормально Код: sql 1. 2. 3. 4. 5.
делаем Код: sql 1.
снова всё OK. А теперь наоборот изменим на однобайтный чарсет Код: sql 1.
оператор прошёл успешно пробуем Код: sql 1.
получаем шваброй по лбу Код: plaintext 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2015, 09:53 |
|
Изменение CHARACTER SET поля
|
|||
---|---|---|---|
#18+
в принципе работать через alter column должно. Но тогда надо в FB добавить контроль по совместимости чарсетов, так же как это сделано для размеров строк. К примеру Код: sql 1.
не позволит изменить на меньший размер Код: sql 1.
авторThis operation is not defined for system tables. unsuccessful metadata update. ALTER DOMAIN D2 failed. New size specified for column D2 must be at least 40 characters. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2015, 09:58 |
|
Изменение CHARACTER SET поля
|
|||
---|---|---|---|
#18+
Симонов Денис, Мой вопрос совсем о другом: тихое (!) нежелание менять чарсет через ALTER TABLE ... ALTER COLUMN TYPE - это баг или фича? То, что изменение чарсета может привести к проблемам - я в курсе. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2015, 10:02 |
|
Изменение CHARACTER SET поля
|
|||
---|---|---|---|
#18+
Симонов ДенисНо тогда надо в FB добавить контроль по совместимости чарсетов, так же как это сделано для размеров строк. Сам по себе контроль каких-то размеров здесь ничего не даст, в поле с чарсетом NONE вполне могут лежать данные в UTF8. И наоборот. Да и не об этом мой вопрос... ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2015, 10:04 |
|
Изменение CHARACTER SET поля
|
|||
---|---|---|---|
#18+
IBExpert, Размер должен косвенно контролироваться. В character set none это 10 байт, в utf8 - 40 значит нельзя менять utf8 в none без смены размера до 40. IBExpert нежелание менять чарсет через ALTER TABLE ... ALTER COLUMN TYPE - это баг или фича? ИХМО бага. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2015, 10:10 |
|
Изменение CHARACTER SET поля
|
|||
---|---|---|---|
#18+
я бы сказал, что надо выбрасывать ошибку вместо тихого no-op. И для доменов тоже ругаться. Ибо в обоих случаях нельзя гарантировать совместимость данных. В идеале можно допустить смену чарсета для пустой таблицы (для домена потребуется отследить все его зависимости), но вряд ли будем с этим заморачиваться. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2015, 11:25 |
|
Изменение CHARACTER SET поля
|
|||
---|---|---|---|
#18+
Симонов Денис, dimitr смена чарсета столбца (или домена) - это примерно то же самое, что и смена типа (с инт на строку или обратно). То есть, можно получить "шваброй по лбу", зато можно поменять тип. Так что, я бы допустил (смену чарсета). Иначе и alter column надо запрещать. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2015, 13:24 |
|
Изменение CHARACTER SET поля
|
|||
---|---|---|---|
#18+
kdv, да, но ALTER COLUMN ... TYPE запрещает менять тип на несовместимый. INT на строку можно, а наоборот запрещено ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2015, 13:26 |
|
Изменение CHARACTER SET поля
|
|||
---|---|---|---|
#18+
ALTER у нас [почти никогда] не читает данные. Поэтому допускаются только те операции, которые априори корректны, независимо от хранимых значений. Именно поэтому можно увеличить длину столбца, но нельзя уменьшить. Большинство преобразований чарсетов декларативно валидировать невозможно, разве что кроме ASCII->что-то-там или что-то-там->UTF8 (и то не всегда, насколько помню). Поэтому я и написал, что надо ругаться. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2015, 14:24 |
|
|
start [/forum/topic.php?fid=40&msg=39075105&tid=1562595]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
35ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
others: | 257ms |
total: | 379ms |
0 / 0 |