Регулярные выражения C# с \Uxxxxxxxx символами в шаблоне

(Если я правильно помню) В этой старой версии такой DEFAULT мог быть применен только к первому TIMESTAMP в таблице. Пожалуйста, предоставьте SHOW CREATE TABLE.

Пожалуйста, рассмотрите возможность перехода на InnoDB.

Из журнала изменений 5.6.6:

В MySQL тип данных TIMESTAMP нестандартным образом отличается от других типов данных:

Столбцам TIMESTAMP , явно не объявленным с атрибутом NULL, присваивается атрибут NOT NULL. (Столбцы других типов данных, если они явно не объявлены как NOT NULL, допускают значения NULL.) Установка для такого столбца значения NULL устанавливает его в текущую метку времени.

Первому столбцу TIMESTAMP в таблице, если он не объявлен с атрибутом NULL или явным предложением DEFAULT или ON UPDATE, автоматически назначаются атрибуты DEFAULT CURRENT_TIMESTAMP и ON UPDATE CURRENT_TIMESTAMP.

TIMESTAMP столбцы после первого, если они не объявлены с атрибутом NULL или явным предложением DEFAULT, автоматически присваиваются DEFAULT '0000-00-00 00:00:00' («ноль») отметка времени). Для вставленных строк, которые не указывают явного значения для такого столбца, столбцу присваивается значение «0000-00-00 00:00:00», и предупреждение не появляется.

Эти нестандартные поведения остаются по умолчанию для TIMESTAMP , но теперь устарели, и это предупреждение появляется при запуске:

[Warning] TIMESTAMP с неявным значением DEFAULT устарело. Пожалуйста, используйте параметр сервера --explicit_defaults_for_timestamp (см. Документацию для более подробной информации).

Как указано в предупреждении, чтобы отключить нестандартное поведение, включите новую системную переменную [118 ]licit_defaults_for_timestamp при запуске сервера. Если эта переменная включена, сервер обрабатывает TIMESTAMP следующим образом:

TIMESTAMP , явно не объявленные как NOT NULL, допускают значения NULL. Установка такого столбца в NULL устанавливает его в NULL, а не в текущую метку времени.

Нет столбца TIMESTAMP , которому автоматически присваиваются атрибуты DEFAULT CURRENT_TIMESTAMP или ON UPDATE CURRENT_TIMESTAMP. Эти атрибуты должны быть явно указаны.

столбцы TIMESTAMP , объявленные как NOT NULL и без явного предложения DEFAULT, обрабатываются как не имеющие значения по умолчанию. Для вставленных строк, которые не указывают явного значения для такого столбца, результат зависит от режима SQL. Если включен режим строгого SQL, возникает ошибка. Если режим строгого SQL не включен, столбцу присваивается неявное значение по умолчанию «0000-00-00 00:00:00», и появляется предупреждение. Это подобно тому, как MySQL обрабатывает другие временные типы, такие как DATETIME .

BLOCKQUOTE>

6
задан DPenner1 1 November 2013 в 22:08
поделиться

2 ответа

Они - суррогатные пары. Посмотрите на значения - они - более чем 65 535. Символ является только 16 битовыми значениями. Как был бы Вы выражение 65536 только в 16 битах?

К сожалению, не ясно из документации, как (или ли) механизм регулярного выражения в.NET справляется с символами, которые не находятся в основной многоязычной плоскости. (\uxxxx шаблон в документации регулярного выражения только покрывает 0-65535, точно так же, как \uxxxx как escape-последовательность C#.)

Действительно ли Ваше реальное регулярное выражение больше, или Вы на самом деле просто пытаетесь видеть, существуют ли какие-либо non-BMP символы там?

10
ответ дан 8 December 2019 в 16:12
поделиться

Стрельба по тарелочкам @Jon

Таким образом, то, что Вы говорите мне, - то, что нет способа использовать инструменты Regex в .NET для соответствия на символах за пределами диапазона utf-16?

Полный regex:

^(\u0009|[\u0020-\u007E]|\u0085|[\u00A0-\uD7FF]|[\uE000-\uFFFD]|[\U00010000-\U0010FFFF])+$

Я пытаюсь проверить, содержит ли строка только то, что yaml документ определяет как печатаемый Unicode chararters.

1
ответ дан 8 December 2019 в 16:12
поделиться
Другие вопросы по тегам:

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