Порядок условия в цикле с условием продолжения

Короче говоря, Вы не можете сделать этого с только phpPgAdmin или SQL, не рискуя существующее повреждение данных . Необходимо экспортировать все данные, создать базу данных с корректным кодированием, и восстановление экспортировало данные.

Это - то, как необходимо продолжить двигаться:

  1. создают дамп базы данных :

    pg_dump your_database > your_database.sql

    это сохранит Ваша база данных в sql формате, в кодировании Вас в настоящее время имеют.

  2. удаляют базу данных (или переименуйте ее):

    DROP DATABASE your_database

    , если у Вас есть достаточно устройства хранения данных, чтобы сделать это, я рекомендую оставить старую базу данных, пока Вы не удостоверяетесь, что все соглашается с новым одним, переименовывают это:

    ALTER DATABASE your_database RENAME TO your_database_backup;

  3. создают базу данных с новым кодированием :

    CREATE DATABASE your_database WITH ENCODING 'UNICODE' TEMPLATE=template0;

  4. данные импорта из дампа, созданного прежде :

    PGCLIENTENCODING=YOUR_OLD_ENCODING psql -f your_database.sql your_database

    необходимо установить psql клиент, кодирующий на один, Вы имели в старой базе данных.

Изменение, кодирующее на лету, не возможно, поскольку оно потребовало бы перезаписи большинства внутренних данных базы данных, который почти равен воссозданию дб путем, я описал.

возможно просто изменить внутреннюю информацию о пост-ГРЭС о базе данных и любых новых данных после того, как это изменение будет сохранено правильно, однако Ваши существующие данные могли бы стать поврежденными .

6
задан stefanB 10 July 2009 в 07:16
поделиться

6 ответов

The second condition will not be evaluated unless the first one has been evaluated to true. You can count on this. Millions lines of code work because this is how C and C++ do short-curcuit logical expressions evaluation.

You can use it and count on it. If the first expression evaluates to false the second will not even start evaluating.

23
ответ дан 8 December 2019 в 02:53
поделиться

This is not a bug. C++ uses short-circuit evaluation, so the second condition will never be evaluated when the first condition is false.

4
ответ дан 8 December 2019 в 02:53
поделиться

It won't be evaluated. However, if you are worried -at all- that a routine you code will come back to bite you you should re-evaluate what you are writing. You have admitted that it is poor programming practice. You already know its going to be a problem. When those conditions are met, just fix the thing. You'll hate yourself less in the morning.

2
ответ дан 8 December 2019 в 02:53
поделиться

The language guarantees this short circuiting behaviour so you should not be concerned at all by using it. It also works with || - if the first condition is true, the second is not evaluated.

1
ответ дан 8 December 2019 в 02:53
поделиться

Не следует считать плохой практикой использование короткого замыкания логических операторов И и ИЛИ C ++. Это совершенно идиоматично и часто приводит к более ясному и лаконичному коду.

Например,

std::auto_ptr< SomeObject > data;

С коротким замыканием && :

// Clear expired data, if present
if( data.get() && data->expired )
    data.reset();

Без использования короткого замыкания && вам нужен дополнительный уровень if , что приводит к более подробному коду.

// Clear expired data, if present
if( data.get() )
{
    if ( data->expired )
        data.reset();
}
1
ответ дан 8 December 2019 в 02:53
поделиться

Второе условие не будет оцениваться, если первое условие не истинно. Как вы сказали, за этой оптимизацией следуют все компиляторы C ++.

Если вы все еще не можете использовать ее, добавьте в то время простой оператор if.

while ( a != b ) {
    if ( array[a] < c )
    {
         // your code goes here.
    }
    else
    {
        break;
    }
}
1
ответ дан 8 December 2019 в 02:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: