MySQL Open Guid должен содержать 32 цифры с четырьмя тире [dубликат]

Это относится к @Anton Tykhyy answer

Вот моя реализация C ++ 11 constexpr, устраняющая броски и удаление предупреждения на VC ++ 17 путем обрезания 64-битного результата до 32 бит:

constexpr uint32_t DeBruijnSequence[32] = { 0, 1, 28, 2, 29, 14, 24, 3, 30, 22, 20, 15, 25, 17, 4, 8, 31, 27, 13, 23, 21, 19, 16, 7, 26, 12, 18, 6, 11, 5, 10, 9 }; constexpr uint32_t ffs ( uint32_t value ) { return DeBruijnSequence[ (( ( value & ( -static_cast<int32_t>(value) ) ) * 0x077CB531ULL ) & 0xFFFFFFFF) >> 27]; }

Чтобы обойти проблему 0x1 и 0x0, возвращающих 0, вы можете сделать:

constexpr uint32_t ffs ( uint32_t value ) { return (!value) ? 32 : DeBruijnSequence[ (( ( value & ( -static_cast<int32_t>(value) ) ) * 0x077CB531ULL ) & 0xFFFFFFFF) >> 27]; }

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

Наконец, если интересно, вот список статических утверждений, чтобы проверить, что код выполняет то, что предназначено для:

static_assert (ffs(0x1) == 0, "Find First Bit Set Failure."); static_assert (ffs(0x2) == 1, "Find First Bit Set Failure."); static_assert (ffs(0x4) == 2, "Find First Bit Set Failure."); static_assert (ffs(0x8) == 3, "Find First Bit Set Failure."); static_assert (ffs(0x10) == 4, "Find First Bit Set Failure."); static_assert (ffs(0x20) == 5, "Find First Bit Set Failure."); static_assert (ffs(0x40) == 6, "Find First Bit Set Failure."); static_assert (ffs(0x80) == 7, "Find First Bit Set Failure."); static_assert (ffs(0x100) == 8, "Find First Bit Set Failure."); static_assert (ffs(0x200) == 9, "Find First Bit Set Failure."); static_assert (ffs(0x400) == 10, "Find First Bit Set Failure."); static_assert (ffs(0x800) == 11, "Find First Bit Set Failure."); static_assert (ffs(0x1000) == 12, "Find First Bit Set Failure."); static_assert (ffs(0x2000) == 13, "Find First Bit Set Failure."); static_assert (ffs(0x4000) == 14, "Find First Bit Set Failure."); static_assert (ffs(0x8000) == 15, "Find First Bit Set Failure."); static_assert (ffs(0x10000) == 16, "Find First Bit Set Failure."); static_assert (ffs(0x20000) == 17, "Find First Bit Set Failure."); static_assert (ffs(0x40000) == 18, "Find First Bit Set Failure."); static_assert (ffs(0x80000) == 19, "Find First Bit Set Failure."); static_assert (ffs(0x100000) == 20, "Find First Bit Set Failure."); static_assert (ffs(0x200000) == 21, "Find First Bit Set Failure."); static_assert (ffs(0x400000) == 22, "Find First Bit Set Failure."); static_assert (ffs(0x800000) == 23, "Find First Bit Set Failure."); static_assert (ffs(0x1000000) == 24, "Find First Bit Set Failure."); static_assert (ffs(0x2000000) == 25, "Find First Bit Set Failure."); static_assert (ffs(0x4000000) == 26, "Find First Bit Set Failure."); static_assert (ffs(0x8000000) == 27, "Find First Bit Set Failure."); static_assert (ffs(0x10000000) == 28, "Find First Bit Set Failure."); static_assert (ffs(0x20000000) == 29, "Find First Bit Set Failure."); static_assert (ffs(0x40000000) == 30, "Find First Bit Set Failure."); static_assert (ffs(0x80000000) == 31, "Find First Bit Set Failure.");
2
задан Peter 24 December 2009 в 12:28
поделиться

2 ответа

Ну, после разыскивания немного, я подумал, что посмотрю, выпустил ли MySQL более позднюю версию .NET Connector, чем я. Я нашел https://dev.mysql.com/downloads/connector/net/ . Это говорит о ошибке, которую я получаю, и говорит о опции «old guids = true» в строке соединения (она не говорит, когда и как вы должны это использовать, но что она не работает должным образом в версии 6.1.3).

Я попытался поместить «oldguids = true» в строку подключения, а затем мое общее приложение сработало.

5
ответ дан php99 15 August 2018 в 17:38
поделиться

У меня была та же проблема, но это было вызвано хранимой процедурой, в которой я объявлял переменную типа Char (36) и MySql (я предполагаю, что Connector) интерпретировал это как GUID. Таким образом, изменив его размер до 37 (или что-то еще), он сработал.

4
ответ дан Adrian Marinica 15 August 2018 в 17:38
поделиться
Другие вопросы по тегам:

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