Почему SQL Server теряет миллисекунду?

По умолчанию Docker подключит ваш новый контейнер к мостовой сети. Это означает, что адреса, такие как: localhost и 127.0.0.1 относятся только к самому контейнеру. Не хост-машина.

Решить это было легко, это обернуть базу данных MySQL в собственный контейнер. Таким образом, ваши контейнеры могут обращаться друг к другу без проблем.

Подключение к базе данных MySQL на хосте

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

Сначала вам нужно будет создать сеть. Предполагая, что ваш локальный компьютер имеет фиксированный IP-адрес 192.168.0.1, вы сможете сделать это с помощью:

docker network create -d bridge --subnet 192.168.0.0/24 --gateway 192.168.0.1 dockernet

Затем вы можете:

docker run --name  test-wordpress --net=dockernet -p 8081:80 -d wordpress

И тогда вы должны быть может ссылаться на хост изнутри контейнера по IP: 192.168.0.1.

Создание стека с помощью Wordpress и MySQL.

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

Вы можете создать файл docker-compose.yml следующим образом:

docker-compose.yml

version: '3.3'

services:
   db:
     image: mysql:5.7
     volumes:
       - db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: somewordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - "8000:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
       WORDPRESS_DB_NAME: wordpress
volumes:
    db_data: {}

И запустить стек следующим образом:

[ 113]

Затем посетите: http: // localhost: 8000

Обратите внимание, что данные базы данных будут храниться на томе, управляемом докером, который называется db_data.

Подробную информацию об установке docker-compose можно найти здесь: https://docs.docker.com/compose/install/

. Запустите оба контейнера, просто docker run [1119 ]

То же самое может быть достигнуто только с помощью docker run, например так:

docker volume create db_data

docker network create mysqlnet

docker run --name test-mysql -e MYSQL_ROOT_PASSWORD=somewordpress -e MYSQL_DATABASE=wordpress -e MYSQL_USER=wordpress -e MYSQL_PASSWORD=wordpress -v db_data:/var/lib/mysql --net=mysqlnet -d mysql:5.7

docker run --name test-wordpress -e WORDPRESS_DB_HOST=test-mysql:3306 -e WORDPRESS_DB_USER=wordpress -e WORDPRESS_DB_PASSWORD=wordpress -e WORDPRESS_DB_NAME=wordpress --net=mysqlnet -p 8081:80 -d wordpress:latest

Вместо этого вы можете изменить отображение файлов данных mysql на локальный каталог и просто пропустить оператор docker volume create .

65
задан Luke Girvin 18 October 2017 в 15:42
поделиться

6 ответов

SQL Server только хранит время к приблизительно 1/300-му из секунды. Они всегда падают на 0, 3 и 7 миллисекунд. Например, подсчет от 0 в самом маленьком инкременте:

0:00:00.000
0:00:00.003
0:00:00.007
0:00:00.010
0:00:00.013
...

При необходимости в той точности миллисекунды нет никакого приятного пути вокруг этого. Наилучшие варианты, которые я видел, состоят в том, чтобы сохранить значение в пользовательских числовых полях и восстановить его каждый раз, когда Вы выбираете значение, или сохранить его как строку известного формата. Можно затем (дополнительно) сохранить 'приблизительную' дату в собственном типе даты ради скорости, но это представляет концептуальную сложность, которая часто не требуется.

90
ответ дан Whatsit 24 November 2019 в 15:17
поделиться

SQL Server 2008 имеет намного больше доступной точности. Тип datetime2 точно сохранит значения как это: 19.12.2008 9:31:38.5670514 (точность к 100 наносекундам).

Ссылка: время и datetime2 - Исследующий Новые Типы данных Даты/Времени 2008 SQL Server

35
ответ дан nikib3ro 24 November 2019 в 15:17
поделиться

SQL Server datetime тип только имеет 1/300-ю из секунды (~3.33 ̅ мс) разрешение, таким образом, Вы, вероятно, видите погрешность округления.

Посмотрите ссылку SQL Server Даты и времени MSDN

27
ответ дан Eli Rose 24 November 2019 в 15:17
поделиться

SQL Server только с точностью до 1/300-й из секунды. Это будет круглые значения к ближайшему 1/300-му.

6
ответ дан TheCloudlessSky 24 November 2019 в 15:17
поделиться

ДАТА И ВРЕМЯ не имеет бесконечной точности - Вы, вероятно, используете значение, которое не может точно быть представлено с доступными битами.

3
ответ дан 24 November 2019 в 15:17
поделиться

SQL Server хранит значения даты и времени к точности 3 миллисекунд. (Я услышал об этом, но не могу найти официальную ссылку.)

2
ответ дан Bhargav Rao 24 November 2019 в 15:17
поделиться
Другие вопросы по тегам:

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