PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Сравнение на типовете колони на базата данни в MySQL, PostgreSQL и SQLite? (Кръстосано картографиране)

Списък с неща, които бих направил по различен начин:

MEDIUMINT в MySQL е странна патица (3 байта). Бих го избегнал, но в противен случай също го преобразувам в INTEGER.

MySQL BOOLEAN (псевдоним BOOL, псевдоним TINYINT(1)) не е съвместим с булевия тип pg. Може или не можете да пренасяте приложения в зависимост от това какво използват като булеви литерали. В MySQL, TRUE и FALSE се преобразуват в 1 и 0 цели числа. Изглежда, че типът pg BOOLEAN използва литерална нотация на низ. Така че приложенията може да са или да не са преносими – поне не е замяна.

И накрая, за последния ред във вашата таблица мисля, че фразата на SQLite трябва да гласи:

INTEGER PRIMARY KEY AUTOINCREMENT

Това е приблизително еквивалентно на

BIGINT PRIMARY KEY AUTO_INCREMENT

в MySQL. В postgres типът данни SERIAL води до колона INTEGER и това ще бъде приблизително същото като

на MySQL
INTEGER PRIMARY KEY AUTO_INCREMENT

Postgres също има тип BIGSERIAL, който е същият като SERIAL, но с тип BIGINT вместо тип INT.

Какво пропуснах:

Липсва ми INTEGER (псевдоним INT) за MySQL. Той е сравним с INTEGER в pg. Много важни пропуски:VARCHAR и CHAR. Семантично VARCHAR в MySQL и PG и CHAR в MySQL и PG са едни и същи, но в MySQL тези типове имат много по-къса максимална дължина. В MySQL тези типове могат да имат максимум малко по-малко от 64kb, в pg 1Gb (байтове). Реалният спецификатор на дължина се изразява в броя на знаците, така че ако имате многобайтов набор от знаци, трябва да разделите максималната дължина на максималния брой знаци, за да получите теоретичната максимална дължина, определена за този набор от знаци. В SQLite VARCHAR и CHAR преобразуват и двете в TEXT

Типовете данни BIT в MySQL и PG имат приблизително същата семантика, но в MySQL максималната дължина на типа данни BIT е 64 (бита)

Мисля, че типът данни на MySQL VARBINARY е най-добре сравним с типа данни BYTEA на PG. (но наистина BLOB типовете на MySQL също се съпоставят с това)

Типът FLOAT в MySQL трябва да е еквивалентен на REAL в postgres (и REAL в SQLite също) Типът DECIMAL в MySQL е еквивалентен на DECIMAL в postgres, с изключение на това, че в postgres типът не налага произволно ограничение на точността, докато в Максималната точност на MySQL е (вярвам) 70. (тоест 70 позиции на числа) И за MySQL, и за Postgres, NUMERIC е псевдоним за типа DECIMAL.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Върнете типа на таблицата от функция A в PostgreSQL

  2. С нетърпение очакваме PGConf India 2017

  3. Postgres - как да върна редове с 0 броя за липсващи данни?

  4. DROP FUNCTION без да знаете броя/вида на параметрите?

  5. Новите данни не се запазват в колоната на Rails масив на Postgres