アプリ版:「スタンプのみでお礼する」機能のリリースについて

お世話になります。
 BD初心者なのですが、
Postgressで作成されたダンプファイル(文字コードEUC)からMySQL(MariaDB・UTF-8)へ
データベース構造を変更しようとしています。

いずれもサーバー附属のphpMyAdminなどのソフト経由でダンプして
インポートしようと思っています。

例えばPostgressのテーブル構造が以下の場合

CREATE TABLE table_name (
column_a integer NOT NULL,
column_b integer,
"timestamp" bytea
);


1.MySQLでは、どのように記載すればよいでしょうか?
2.MySQLでは2032年問題があるようですので
 datetime型に変更しても問題ないでしょうか?

上記2点や変更移管する際の注意事項等まとめているサイトがあれば
ご教示いただけないでしょうか?
宜しくお願いします。 <(_ _)>

A 回答 (2件)

https://dev.mysql.com/doc/refman/8.0/ja/datetime …
マニュアルには

> DATETIME 型は(略)サポートしている範囲は '1000-01-01 00:00:00' から '9999-12-31 23:59:59' です。

> TIMESTAMP データ型は(略)'1970-01-01 00:00:01' UTC から '2038-01-19 03:14:07' UTC の範囲があります。

とあるので、「DATETIME型は2038年問題がありますが、TIMESTAMP型は2038年問題を回避することができます」という#1の主張と逆なんだが。
(念の為5.6のマニュアルも調べたけど、範囲は最新版と一緒だった)


> 例えばPostgressのテーブル構造が以下の場合
> CREATE TABLE table_name (
> column_a integer NOT NULL,
> column_b integer,
> "timestamp" bytea
> );

型の違いはマニュアルで確認できます。
https://dev.mysql.com/doc/refman/8.0/ja/data-typ …
https://www.postgresql.jp/document/14/html/datat …

たとえば、Postgresql の integer は MySQLの INT (またはINTEGER)に相当します。

bytea はバイナリ列のデータです。
https://www.postgresql.jp/document/14/html/datat …
そのまま移行させるなら、VARBINAYが該当しそうです。
https://dev.mysql.com/doc/refman/8.0/ja/binary-v …

ただ、"timestamp"のバイナリデータが日時データをなんらかの方法で変化させたものだったら、元の日時のままDATATIME型に収めた方はいろいろと便利かもしれません。
    • good
    • 1
この回答へのお礼

助かりました

ご教示並びにご指摘ありがとうございます。
「mysqlでは、timestamp型に2038年問題がある。」為DATATIME型に収めようと思います。

<(_ _)>

お礼日時:2023/04/06 08:52

PostgreSQLとMySQLのデータベース構造は異なるため、直接的な変換はできません。

以下は、PostgreSQLからMySQLにデータを移行する方法の一例です。

PostgreSQLのダンプファイルをMySQLのインポート形式に変換する
 PostgreSQLのダンプファイルは、以下のような形式で記述されます。
テーブル table_nameの作成 (
column_a整数はヌルではありません。
column_b整数、
"タイムスタンプ" bytea
);

MySQLのインポート形式に変換するには、以下のように記述します。

テーブル table_nameの作成 (
column_a 整数 ヌルではありません、
column_b INT
'タイムスタンプ

データ型やクオートの仕方、予約語の扱いなどが異なるため、手動で変換する必要があります。また、EUCの文字コードをUTF-8に変換する必要もあります。

MySQLの2038年問題
 MySQLのDATETIME型は2038年問題がありますが、TIMESTAMP型は2038年問題を回避することができます。ただし、MySQL 5.6以前では、TIMESTAMP型の範囲が1970年から2038年までとなっています。
MySQL 5.6以前を使用している場合、DATETIME型からTIMESTAMP型に変換することができます。ただし、既に値が入っている場合は注意が必要です。

MySQL 5.7以降を使用している場合、TIMESTAMP型の範囲が1970年から2038年までとなっているため、DATETIME型をTIMESTAMP型に変換する必要はありません。

変換に関する詳細は、MySQLの公式ドキュメントを参照してください。

注意点
 データベース構造やデータ型、文字コードなどの違いにより、移行後に不具合が発生する可能性があります。移行前に必ずバックアップを取り、移行後に動作確認を行ってください。また、データベースの設定やアプリケーションの設定も変更する必要がある場合があります。必要に応じて、専門家に相談することをおすすめします。
以上、参考になれば幸いです。
    • good
    • 0
この回答へのお礼

kantansi様
 大変詳細なる御教示、ありがとうございます。

設定部分など専門家に相談してみようと思います。
ものすごく参考になりました!!

心より御礼申し上げます。
<(_ _)>

お礼日時:2023/04/04 14:34

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!