Varchar (20 байт) в синхронизации Oracle с Mysql varchar (20)?

у нас есть база данных Oracle, синхронизированная с Mysql с Symmetrics. Мой коллега изменил один столбец на Varchar2 (20 байт) в Oracle. У меня есть тот же столбец в Mysql (MariaDB), для которого установлено значение varchar (5). Я не знал об изменении в Oracle, и синхронизация срывалась чаще, чем до изменения.

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

Второй вопрос: как изменить varchar в базе данных MySQL, чтобы он соответствовал изменениям в Oracle? Можно ли изменить его на varchar(20) с помощью этой команды или он должен быть больше?:

alter table table_name set column col_name varchar (20);

(Mysql вер. 15.1. Дистрибьютор 10.1.38-MariaDB)

Спасибо


person culter    schedule 28.04.2020    source источник
comment
Oracle рекомендует varchar2 тип данных; вероятно, это не связано с вашим вопросом, но - рассмотрите это предложение.   -  person Littlefoot    schedule 28.04.2020
comment
Привет, Littlefoot, я только что прочитал об этом на oracle.com, но, как я уже говорил, Oracle меня не касается. Все, что мне нужно знать, это могу ли я передать данные из varchar (20 байт) Oracle в varchar (20) Mysql.   -  person culter    schedule 28.04.2020
comment
К сожалению, я немного знаю Oracle и не знаю ни MySQL, ни MariaDB. В любом случае: каким был тип данных этого столбца до того, как ваш коллега изменил его? Кроме того, как происходит синхронизация (я имею в виду, что такое источник и что такое цель)? Что касается размера столбца: есть разница, например, между varchar2 (20 байт) и varchr2 (20 символов) из-за многобайтовых символов. Если вы этого не ожидаете, то, я полагаю, вы не увидите никакой разницы.   -  person Littlefoot    schedule 28.04.2020
comment
В Oracle это было varchar2(8), а теперь varchar2(20 байт). Я нашел в документации следующее: при объявлении типа CHAR или VARCHAR в MySQL семантика длины по умолчанию - это символы, а не байты для MySQL 4.1 и более поздних версий. В Oracle семантика длины по умолчанию — это байты для типов CHAR и VARCHAR2 и символы для типов NCHAR и NVARCHAR2. Если я правильно понимаю, учитывая varchar, байт в Oracle - это символ в Mysql. Возможно, измените длину в Mysql на varchar (25), чтобы выполнить эту работу.   -  person culter    schedule 28.04.2020
comment
..и я отредактировал вопрос. Я добавил varchar2, потому что не заметил 2.   -  person culter    schedule 28.04.2020
comment
Источником синхронизации является Oracle.   -  person culter    schedule 28.04.2020


Ответы (1)


Синтаксис

ALTER TABLE t MODIFY COLUMN ...
              ------

В MySQL и MariaDB varchar(5) допускает использование до 5 символов. Если CHARACTER SET — это utf8mb4, то это может занимать до 4*5=20 байт. (Я не знаю интерпретации Oracle. И я ничего не знаю о Symmetrics.)

person Rick James    schedule 13.05.2020