Материал: Using_MySql,_MS_SQL_Server_and_Oracle

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Пример 49: управление пользователями, запуск и остановка СУБД

На этом решение данной задачи завершено.

Задание 7.3.1 .TSK.A: убрать у пользователя, созданного в решении{523} задачи 7.3.1.b{522} права доступа к базе данных «Библиотека».

Задание 7.3.1.TSK.B: удалить созданного в решении{522} задачи 7.3.1.a{522} пользователя.

Задание 7.3.1.TSK.C: написать командный файл, показывающий, запущена ли в настоящий момент каждая из трёх СУБД.

Задание 7.3.1.TSK.D: переписать решение{523} задачи 7.3.1.c{522} под управлением Linux.

Работа с MySQL, MS SQL Server и Oracle в примерах © EPAM Systems, RD Dep, 2016-2018 Стр: 555/545

Пример 50: определение и изменение кодировок

7.3.2. Пример 50: определение и изменение кодировок

Задача 7.3.2.a{525}: вывести всю информацию о текущих настройках СУБД относительно кодировок, используемых по умолчанию.

Задача 7.3.2.b{526}: изменить все настройки кодировок СУБД по умолчанию на UTF8.

Ожидаемый результат 7.3.2.a.

В результате выполнения запроса (запросов) отображаются текущие настройки СУБД относительно кодировок, используемых по умолчанию.

Ожидаемый результат 7.3.2.b.

В результате выполнения запроса (запросов) кодировки СУБД по умолчанию меняются на UTF8.

'IT Решение 7.3.2.a{525}:

В MySQL информацию о кодировках можно получить следующим запросом (обратите внимание: символ _ экранирован символом \, т.к. _ обозначает «любой символ» — в данном случае это не критично, но всё равно следует писать правильно).

MySQL

Решение 7.3.2.a

 

1

SHOW GLOBAL VARIABLES

 

2

WHERE

'variable_name' LIKE

'character\_set%'

3

OR

'variable name' LIKE

'collat%'

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

Variable_name

Value

character_set_client

utf8

character set connection

utf8

character_set_database

utf8

character_set_filesystem

Binary

character_set_results

utf8

character set server

utf8

character set system

utf8

character_sets_dir

C:\Program Files\MySQL\MySQL Server 5.6\share\charsets\

collation_connection

utf8_general_ci

collation_database

utf8_general_ci

collation _server

utf8_ general_ci

В MS SQL Server информацию о кодировках можно получить следующим запросом.

MS SQL Решение 7.3.2.a

1SELECT [collation_name]

2FROM [sys].[databases]

3WHERE [name] = 'master'

Работа с MySQL, MS SQL Server и Oracle в примерах © EPAM Systems, RD Dep, 2016-2018 Стр: 556/545

Пример 50: определение и изменение кодировок

Результатом выполнения такого запроса будет таблица со следующими дан-

ными.

collation_name

Cyrillic General CI AS

MS SQL Server будет применять эту кодировку по умолчанию ко всем новым базам данных и их структурам, если в соответствующих запросах не буде указана иная кодировка.

В Oracle информацию о кодировках можно получить следующим запросом.

Oracle і Решение 7.3.2.a [

1-- Упрощённый вариант:

2SELECT value$

3

FROM

sys.props$

4

WHERE

name = 'NLS_CHARACTERSET';

5

 

 

6-- Расширенный вариант:

7SELECT parameter,

8value

9FROM nls_database_parameters

10WHERE parameter = 'NLS_CHARACTERSET'

11OR parameter = 'NLS NCHAR CHARACTERSET';

Первый запрос вернёт следующую информацию.

VALUES

AL32UTF8

Второй запрос вернёт следующую информацию.

PARAMETER VALUE

NLS_CHARACTERSET AL32UTF8

NLS_NCHAR_CHARACTERSET AL16UTF16

Значение параметра NLS_CHARACTERSET отвечает за кодировку «обычных»

данных (без приставки N, т.е. CHAR, VARCHAR2 и т.д.), а значение

NLS_NCHAR_CHARACTERSET — за кодировку «национальных данных» (т.е. NCHAR,

NVARCHAR2 и т.д.)

На этом решение данной задачи завершено.

уЦ7

ЧР Решение 7.3.2.b{525}.

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

ответствующих экспериментов.

В MySQL изменить настройки кодировок СУБД по умолчанию можно или в конфигурационном файле my.ini (постоянные изменения), или запросами следующего вида (изменения действуют до перезапуска СУБД):

MySQL Решение 7.3.1 .b

1 --

Повторять для всех необходимых переменных:

2 SET character set database = 'utf8';

Работа с MySQL, MS SQL Server и Oracle в примерах © EPAM Systems, RD Dep, 2016-2018 Стр: 557/545

Пример 50: определение и изменение кодировок

В MS SQL Server изменить настройки кодировок СУБД по умолчанию можно только достаточно сложным способом:

остановить СУБД;

выполнить из консоли следующую команду (её параметры могут отличаться в зависимости от версии СУБД):

MySQL і Решение 7.3.1.b [

1. sqlservr -m.-T4022 -T3659 -s"СЕРВИС" -д"КОДИРОВКА" ........................ ]

запустить СУБД.

Что касается самой кодировки, то «в чистом виде» UTF8 не поддерживается в MS SQL Server, но хранения и обработки соответствующих данных можно добиться через использование других кодировок50.

И, наконец, в Oracle изменение кодировок по умолчанию возможно только с выполнением достаточно нетривиальной процедуры51 (описание которой явно выходит за рамки данной книги), а потому рекомендуется на стадии инсталляции СУБД указать все необходимые параметры по умолчанию, а также указывать кодировки при создании отдельных баз данных и таблиц.

Задание 7.3.2.TSK.A: провести во всех трёх СУБД эксперимент с изменением кодировки существующей базы данных, содержащей строки с кириллическими символами; проверить, как изменится отображение, поиск и упорядочение таких данных.

Задание 7.3.2.TSK.B: провести во всех трёх СУБД эксперимент с изменением кодировки соединения на отличную от кодировки базы данных, с которой предстоит работа; проверить, как изменится отображение, поиск и упорядочение строк, содержащих кириллические символы.

50https://msdn.microsoft.com/en-us/library/ms143726%28v=sql.110%29.aspx

51https://docs.oracle.cOm/cd/E11882_01/server.112/e10729/ch11charsetmig.htm#NLSPG011

Работа с MySQL, MS SQL Server и Oracle в примерах © EPAM Systems, RD Dep, 2016-2018 Стр: 558/545

Пример 51: вычисление дат

7.4. Полезные операции с данными

7.4.1. Пример 51: вычисление дат

Задача 7.4.1.a{528}: написать запрос, показывающий по каждой выдаче книг номер дня недели (1 — понедельник, 2 — вторник и т.д.) и порядковый номер соответствующего дня недели в месяце (например, первый четверг месяца, вторая среда месяца и т.д.)

Задача 7.4.1.b{532}: оформить решение задачи 7.4.1.а в виде функции, получающей на вход дату и возвращающей результат в виде одной строки (а не двух отдельных колонок).

Ожидаемый результат 7.4.1.a.

Для каждой даты выдачи книги требуемая по условию задачи информация представлена в столбцах «W» (порядковый номер соответствующего дня недели в месяце) и «D» (номер дня недели):

sb_id

sb_start

W

D

2

2011-01-12

2

3

3

2012-05-17

3

4

42

2012-06-11

2

1

57

2012-06-11

2

1

61

2014-08-03

1

7

62

2014-08-03

1

7

86

2014-08-03

1

7

91

2015-10-07

1

3

95

2015-10-07

1

3

99

2015-10-08

2

4

100

2011-01-12

2

3

Ожидаемый результат 7.4.1.b.

Поскольку само решение и является ожидаемым результатом, см. решение

7.4.1. b.

Решение 7.4.1.a{528}. (Также см. комментарии в решении 7.4.1. b{532}.)

Для начала отметим, что данная задача является расширенным вариантом классики вида «определить, является ли дата третьим вторником месяца» — здесь мы всего лишь определяем искомые параметры для каждой даты, а не проверяем их для некоей одной заданной даты.

Также следует пояснить, как производится расчёт. Рассмотрим календарь октября 2016-го года. Обратите внимание на следующее:

вторая неделя месяца начинается с 3-го числа (понедельника) (к сожалению, интуитивно многие считают, что вторая неделя всегда начинается с 8-го числа любого месяца — это не так);

несмотря на то, что понедельник 3-е октября относится ко второй неделе, он является первым понедельник месяца (в то время как суббота 8-е — уже второй субботой месяца, хоть и находится на той же второй неделе).

Работа с MySQL, MS SQL Server и Oracle в примерах © EPAM Systems, RD Dep, 2016-2018 Стр: 559/545

Источник: https://studfile.net/preview/16420333/